我有一个查询,它从两个表中返回大量列;一个表具有本周初的订单,另一个从今天开始。然后,我将每周订单与每日订单进行比较,看看是否存在差异。
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]它返回的内容如下:

这太棒了。
但是,我希望将“每日结果”与“每周结果”分开,将它们放在一个单独的行中,同时还保留两个新行的差异列。
像这样

我认为我需要使用UNPIVOT,但是在过去的2+时间里,我一直在阅读相关的问题/博客,并且不知道它是如何工作的。
发布于 2017-01-30 21:54:54
只需运行一个UNION查询,只从FROM/JOIN子句中的特定表中选择字段:
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]https://stackoverflow.com/questions/41943892
复制相似问题