2017-01-30 15 views
0

2つのテーブルから大量の列を返すクエリがあります。今週からの注文と今日からの注文があります。私は週次注文と日次注文を比較して、違いがあるかどうかを確認しています。素晴らしいですSQL UNPIVOT支援

enter image description here

:のようなものを返す

SELECT 
    *, 
    CASE 
     WHEN w.[DueDate] != d.[DueDate] 
     THEN 'Due Date' 
     WHEN w.[ItemCode] != d.[ItemCode] 
     THEN 'ItemCode' 
     WHEN w.[PlannedQty] != d.[PlannedQty] 
     THEN 'Planned Qty' 
    END [Discrepancy] 
FROM 
    (SELECT 
     'Daily' [Period], 
     * 
    FROM 
     DailyProduction) d 
    LEFT JOIN 
     (SELECT 
      'Weekly' [Period], 
      * 
     FROM 
      WeeklyProduction) w ON w.[DocNum] = d.[DocNum] 

しかし、私はまた、両方の新しい行の不一致カラムを維持したまま、別の行にそれらを持っていることによって毎日毎週結果からを分離したいです。この enter image description here

同様

私はUNPIVOTを使用する必要があるが、私は過去2+時間の関連する質問/ブログを読んでいると、それがどのように動作するかを見つけ出すことはできませんと思います。

+2

は、開始するには絶好の場所です。 https://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

最初のクエリでどのようにその形式を取得しましたか? SQL Serverは列名が重複していると不平を言ってはいけませんか? – Parfait

+0

私はそれを少し簡略化し、毎日の列はすべてそれらの前に "d"を持っています。 – coblenski

答えて

0

は単にFROM/JOIN句内の特定のテーブルからフィールドだけを選択し、UNIONクエリを実行します。ここでは

SELECT 
    'Daily' AS [Period], 
    d.Status, d.DocNum, d.ProductionDate, d.DueDate, d.Week, 
    d.DueDay, d.ItemCode, d.PlannedQty, 
    CASE 
     WHEN w.[DueDate] != d.[DueDate] 
     THEN 'Due Date' 
     WHEN w.[ItemCode] != d.[ItemCode] 
     THEN 'ItemCode' 
     WHEN w.[PlannedQty] != d.[PlannedQty] 
     THEN 'Planned Qty' 
    END [Discrepancy] 
FROM 
    DailyProduction d 
LEFT JOIN 
    WeeklyProduction w ON w.[DocNum] = d.[DocNum] 

UNION ALL 

SELECT 
    'Weekly' AS [Period], 
    w.Status, w.DocNum, w.ProductionDate, w.DueDate, w.Week, 
    w.DueDay, w.ItemCode, w.PlannedQty, 
    CASE 
     WHEN w.[DueDate] != d.[DueDate] 
     THEN 'Due Date' 
     WHEN w.[ItemCode] != d.[ItemCode] 
     THEN 'ItemCode' 
     WHEN w.[PlannedQty] != d.[PlannedQty] 
     THEN 'Planned Qty' 
    END [Discrepancy] 
FROM 
    DailyProduction d 
LEFT JOIN 
    WeeklyProduction w ON w.[DocNum] = d.[DocNum] 
+0

だから簡単!本当にありがとう。 – coblenski