2016-07-05 2 views
0

以下のクエリを作成する簡単な方法があるかどうかを確認したいのですか?私は労働組合に約10テーブル参加する必要がありますMMA_AUDITSUM_STG私は2つだけ行っている。すべての列名を1つずつ入力して、MMA_SITE_MSTからの結合を含めることは避けたいですか?私はデータを格納するためにSQL Serverを使用しています。UNION ALLを使用したSQL Serverのデータベースクエリ

任意のビューは、私は:)

は事前に

をありがとうござい必要私はまだそう学んでいるかわからない私は真上をやっている場合、それは私を取得するにもかかわらず、結果として歓迎

SELECT 
    a.CLIENT_NAME AS [BRAND], a.SITE_NO AS [SITE NO], 
    a.SITE_NAME AS [SITE], 
    c.FILTER_1 AS [AREA], c.FILTER_2 AS [REGION], 
    a.MANAGER, 
    a.AUDIT_DATE AS [db.audit_date], a.THIS_AUDIT_SCORE AS [SCORE], 
    a.ALERTS_FLAG AS [ALERTS], a.REPEAT_FLAG AS [REPEAT ISSUES], 
    a.ACTION_PLAN_FLAG AS [ACTION PLAN FAILURE], 
    a.Cash, a.Revenue, a.Stock, 
    a.[Unaccounted Stock], a.[People & Payroll], 
    a.[Safe], a.[Security], a.[Petty Cash], a.[Tills], 
    a.[Bankings], a.[Sales], a.[Vouchers & Discounting], 
    a.[PDQ], a.[Administration], 
    a.[Stock Verification], a.[Stock Management], a.[Ordering] 
FROM 
    MMA_AUDITSUM_STG_34 As a 
INNER JOIN 
    MMA_SITE_MST AS c ON a.CLIENT_ID = c.CLIENT_ID 
         AND a.SITE_ID= c.SITE_ID 
         AND a.SITE_NAME= c.SITE_NAME 

UNION ALL 

SELECT 
    b.CLIENT_NAME, b.SITE_NO, b.SITE_NAME, 
    c.FILTER_1, c.FILTER_2, 
    b.MANAGER, b.AUDIT_DATE, b.THIS_AUDIT_SCORE, 
    b.ALERTS_FLAG, b.REPEAT_FLAG, b.ACTION_PLAN_FLAG, 
    b.Cash, b.Revenue, b.Stock, b.[Unaccounted Stock], 
    b.[People & Payroll], b.[Safe], b.[Security], 
    b.[Petty Cash], b.[Tills], b.[Bankings], b.[Sales], 
    b.[Vouchers & Discounting], b.[PDQ], b.[Administration], 
    b.[Stock Verification], b.[Stock Management], b.[Ordering] 
FROM 
    MMA_AUDITSUM_STG_35 As b 
INNER JOIN 
    MMA_SITE_MST As c ON b.CLIENT_ID = b.CLIENT_ID 
         AND b.SITE_ID = c.SITE_ID 
         AND b.SITE_NAME = c.SITE_NAME 

ジョン

+1

あなたの質問は結構です。私は、類似のデータを単一のテーブルではなく、異なるテーブルに配置するデータモデルに疑問を呈するかもしれません。 –

+1

'MMA_SITE_MST'をすべての' MMA_AUDITSUM_STG_% 'テーブルの' union all 'の結果に結びつけて質問を単純化することができますが、私はGordonに同意します。 –

+0

返信いただきありがとうございます。データモデルは複数のブランドを持つクライアントが原因ですが、データモデルにはブランドがないため、異なるクライアントとして設定することはできません。これにより、すべてを組み合わせた、またはブランドごとにフィルタリングできるダッシュボードを作成できます。私は同意し、私のクライアントの残りは私が参加する必要はありません。私はそれを正しくやっている確認のためにありがとう:) – Hoube78

答えて

1

確かに、すべての別々のテーブルが必要な場合は、ビューを作成する方法について考えるかもしれない:

CREATE VIEW v_MMA_AuditSum(
    SELECT * FROM MMA_AUDITSUM_STG_34 
    UNION ALL 
    SELECT * FROM MMA_AUDITSUM_STG_35 
    UNION ALL 
    .... 
) 

その後、あなたのMMA_SITE_MSTに参加してください

SELECT a.CLIENT_NAME 
    ,a.SITE_NO 
    ,a.SITE_NAME 
    ,a.FILTER_1 
    ,a.FILTER_2 
    ,b.* 
    FROM MMA_SITE_MST AS a 
    JOIN cte AS b ON a.CLIENT_ID= b.CLIENT_ID 
       AND a.SITE_ID= b.SITE_ID 
       AND a.SITE_NAME= b.SITE_NAME 
+0

ありがとう、あなたがこれを行うことができるか分からなかった。データを1つのテーブルに移動するストアドプロシージャを作成するために私が受け取った回答に基づいて、それは良いでしょうか?ある意味では、作成ビューと同じですが、一時的ではありません。 – Hoube78

+0

いいえ、それは同じではありません。データをコピーする手順は、説明したように、より多くのデータを生成します。テーブル内のデータ量に応じて、これは膨大な量になる可能性があります。元の位置に1回、新しいテーブルに1回、DBに2倍のレコードがあるからです。ビューの作成は一時的なものではありません。さらに、データは複製されませんが、クエリは元のレコードにリダイレクトされます。言い換えれば、元のレコードが変更され、ビューにも変更が表示されます。 – Tyron78

+0

インデックス付きビューも見ることができます。これにより、データが最新の状態に保たれ、データを追加するたびにストアドプロシージャを実行する必要がなくなります。 –

関連する問題