SQL UNPIVOT 协助

SQL UNPIVOT assistance

我有一个查询,其中 returns 来自两个表的大量列;一个有本周初的订单,一个有今天的订单。然后我将每周订单与每日订单进行比较,看看是否有任何差异。

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]

其中 returns 类似于:

太棒了。

但是我想将 DailyWeekly 结果分开,将它们放在单独的行中,同时还保持两个新行的差异 列。

像这样

我认为我需要使用 UNPIVOT,但过去 2 个多小时我一直在阅读相关问题/博客,但无法弄清楚它是如何工作的。

只是 运行 一个 UNION 查询,仅从 FROM/JOIN 子句中的特定 table 选择字段:

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]