首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL UNPIVOT协助

SQL UNPIVOT协助
EN

Stack Overflow用户
提问于 2017-01-30 19:25:16
回答 1查看 52关注 0票数 0

我有一个查询,它从两个表中返回大量列;一个表具有本周初的订单,另一个从今天开始。然后,我将每周订单与每日订单进行比较,看看是否存在差异。

代码语言:javascript
复制
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+时间里,我一直在阅读相关的问题/博客,并且不知道它是如何工作的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-30 21:54:54

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

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41943892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档