【问题标题】:Is there a general relationship between left outer join and PIVOT?左外连接和 PIVOT 之间是否存在一般关系?
【发布时间】:2013-11-14 17:42:40
【问题描述】:

我刚开始思考左外连接,我正在练习 PIVOTS。

我想知道是否可以将此查询转换为枢轴?

SELECT mydrawercustomer.customerface, 
       mydrawerordertype.ordertypeface, 
       mydrawerorder.LM, 
       Datediff(hour, a1.playdate, a2.playdate) AS [RunningTime1], 
       Datediff(hour, a2.playdate, a3.playdate) AS [RunningTime2], 
       Datediff(hour, a3.playdate, a4.playdate) AS [RunningTime3], 
       Datediff(hour, a1.playdate, a4.playdate) AS [RunningTime4] 
FROM   mydrawerorder 
       LEFT OUTER JOIN mydrawercustomer 
                    ON mydrawerorder.customerKEY = mydrawercustomer.customerKEY 
       LEFT OUTER JOIN mydrawerorderactivity a1 
                    ON mydrawerorder.orderKEY = a1.orderKEY 
                       AND a1.activityKEY = 1 
       LEFT OUTER JOIN mydrawerorderactivity a2 
                    ON mydrawerorder.orderKEY = a2.orderKEY 
                       AND a2.activityKEY = 2 
       LEFT OUTER JOIN mydrawerorderactivity a3 
                    ON mydrawerorder.orderKEY = a3.orderKEY 
                       AND a3.activityKEY = 3 
       LEFT OUTER JOIN mydrawerorderactivity a4 
                    ON mydrawerorder.orderKEY = a4.orderKEY 
                       AND a4.activityKEY = 4 
       INNER JOIN mydrawerordertype 
               ON mydrawerorder.ordertypeKEY = mydrawerordertype.ordertypeKEY 
ORDER  BY mydrawercustomer.customerface, 
          mydrawerordertype.ordertypeface, 
          mydrawerorder.LM, 
          a1.playdate 

我并不是要求你为我解决我的挑战,我只是要求帮助我开始将这种左外连接查询转换为 PIVOT。

【问题讨论】:

标签: sql sql-server sql-server-2008 tsql pivot


【解决方案1】:

通常LEFT JOINPIVOT 之间的关系不是直截了当的,但在您的情况下可以找到解决方案。

您的查询将如下所示:

select customerface, ordertypeface, LM,
    Datediff(hour, [1], [2]) AS [RunningTime1],
    Datediff(hour, [2], [3]) AS [RunningTime2],
    Datediff(hour, [3], [4]) AS [RunningTime3],
    Datediff(hour, [1], [4]) AS [RunningTime4]
from
(
    SELECT
        c.customerface, 
        ot.ordertypeface, 
        o.LM,
        a.activityKEY,
        a.playdate,
        o.orderKEY
    FROM mydrawerorder o
    INNER JOIN mydrawerordertype ot
        ON o.ordertypeKEY = ot.ordertypeKEY 
    LEFT JOIN mydrawercustomer c
        ON o.customerKEY = c.customerKEY 
    LEFT JOIN mydrawerorderactivity a
        ON o.orderKEY = a.orderKEY 
        and a.activityKEY in (1, 2, 3, 4)
) x
pivot
(
    max(playdate)
    for activityKEY in ([1], [2], [3], [4])
) as pvt
ORDER  BY customerface, ordertypeface, LM, [1]

可以在此处找到根据 PIVOT 使用的其他信息:http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-21
    • 2012-12-25
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 2013-12-28
    • 2013-03-03
    相关资源
    最近更新 更多