【问题标题】:SQL Columns as rows join, PIVOT?SQL 列作为行连接,PIVOT?
【发布时间】:2016-09-20 09:33:38
【问题描述】:

我尝试使用枢轴答案处理我在这里找到的结果,但我没有让它工作。我正在尝试按日期将一个表中的列连接到另一个表中的行。

我有以下表格结构/结果。

假期表

日期 |苏珊卡拉丁 |克莱尔威利斯 | FazailaPirbhai
2016-08-22 | 0 | 0 | 1
2016-08-23 | 0 | 1 | 1
2016-08-24 | 0 | 1 | 1
2016-08-25 | 0 | 1 | 1
2016-08-26 | 0 | 0 | 1

我正在尝试加入以下日期和行(每个日期有 3 个人在单独的行中)

电话桌

通话日期 |代理人姓名 | InboundCallsAnswered |入站处理时间
2016-08-22 |克莱尔威利斯 | 0 | 0
2016-08-22 |法扎伊拉·皮尔拜 | 36 | 17484
2016-08-22 |苏珊卡拉丁 | 0 | 0
2016-08-23 |克莱尔威利斯 | 12 | 4250
2016-08-23 |法扎伊拉·皮尔拜 | 16 | 23360 2016-08-23 |苏珊卡拉丁 | 0 | 0

任何帮助将不胜感激,在此先感谢

【问题讨论】:

    标签: sql-server join pivot rows


    【解决方案1】:

    我希望这是你想要的。如果没有,请告诉我

    CREATE TABLE  ##Holidaystable
    ([Date] DATE, SusanCalladine INT, ClaireWillis INT, FazailaPirbhai INT);
    
    INSERT INTO ##Holidaystable VALUES
    ('2016-08-22',  0, 0, 1),
    ('2016-08-23',  0, 1, 1),
    ('2016-08-24',  0, 1, 1),
    ('2016-08-25', 0, 1, 1),
    ('2016-08-26',  0, 0, 1)
    
    
    
    CREATE TABLE  ##TelephonyTable
    ([CallDate] DATE, AgentName VARCHAR(50), InboundCallsAnswered INT, InboundHandleTime INT);
    INSERT INTO ##TelephonyTable VALUES
    ('2016-08-22' , 'Claire Willis' , 0 , 0),
    ('2016-08-22' , 'Fazaila Pirbhai' , 36 , 17484),
    ('2016-08-22' , 'Susan Calladine' , 0 , 0),
    ('2016-08-23' , 'Claire Willis' , 12 , 4250),
    ('2016-08-23' , 'Fazaila Pirbhai' , 16 , 23360),
    ('2016-08-23' , 'Susan Calladine' , 0 , 0)
    
    ----Use a CTE for the query as below
    ;WITH Holiday AS
    (SELECT 
    H.[Date],
    T.CallDate 
    --,T.*
    FROM ##Holidaystable H
    INNER JOIN  ##TelephonyTable T
    ON H.[Date]=T.CallDate
    )
    SELECT * FROM Holiday
    PIVOT
    (
    COUNT([Date]) FOR CallDate IN ([2016-08-22],[2016-08-23])
    ) AS PV1
    

    【讨论】:

    • 感谢 JonWay 的帮助,它越来越接近我所需要的了,基本上在假期表中,我需要对每个人的不同值求和,并将其与电话表对齐,然后再次求和该表中每个人的值,每个表中有 3 个人,但它们是一个表中的行和另一个表中的列,年份的日期等
    • 在这种情况下,如果您取消旋转假日表,@Yared 的答案将可以正常工作
    【解决方案2】:

    您可以使用 UNPIVOT 从 Holiday 表中的列中创建行,并通过 DateAgentName 列将结果与 Telephony 连接。

    -- CREATE Holiday Table
    CREATE TABLE Holiday
        (
          Date DATE NOT NULL ,
          [Susan Calladine] INT NULL ,
          [Claire Willis] INT NULL ,
          [Fazaila Pirbhai] INT NULL
        );
    
    -- CREATE Telephony Table
    CREATE TABLE Telephony
        (
          CallDate DATE NOT NULL ,
          AgentName NVARCHAR(100) NOT NULL ,
          InboundCallsAnswered INT NULL ,
          InboundHandleTime INT NULL
        );
    
    -- Insert rows in Holiday
    INSERT  INTO Holiday
    VALUES  ( '2016-08-22', 0, 0, 1 ),
            ( '2016-08-23', 0, 1, 1 ),
            ( '2016-08-24', 0, 1, 1 ),
            ( '2016-08-25', 0, 1, 1 ),
            ( '2016-08-26', 0, 0, 1 );
    
    -- Insert rows in Telephony
    INSERT  INTO Telephony
    VALUES  ( '2016-08-22', 'Claire Willis', 0, 0 ),
            ( '2016-08-22', 'Fazaila Pirbhai', 36, 17484 ),
            ( '2016-08-22', 'Susan Calladine', 0, 0 ),
            ( '2016-08-23', 'Claire Willis', 12, 4250 ),
            ( '2016-08-23', 'Fazaila Pirbhai', 16, 23360 ),
            ( '2016-08-23', 'Susan Calladine', 0, 0 );
    
    
    -- Use UNPIVOT
    WITH    Hol
              AS ( SELECT   Date ,
                            AgentName ,
                            Calls
                   FROM     ( SELECT    *
                              FROM      Holiday
                            ) p UNPIVOT ( Calls FOR AgentName IN ( [Susan Calladine],
                                                                  [Claire Willis],
                                                                  [Fazaila Pirbhai] ) ) AS unpvt
                 )
        SELECT  Date ,
                Hol.AgentName ,
                Calls ,
                InboundCallsAnswered ,
                InboundHandleTime
        FROM    Hol
                LEFT JOIN Telephony t ON Hol.Date = t.CallDate
                                         AND Hol.AgentName = t.AgentName
        ORDER BY Date ,
                AgentName;
    

    结果将是:

    【讨论】:

    • 谢谢亚瑞德!!这是现场
    • w00t,很高兴你得到了你想要的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    相关资源
    最近更新 更多