2016-09-20 96 views
1

我試着用我在這裏找到的結果使用數據透視的答案,但我沒有得到它的工作。我試圖按照日期將一個表中的列連接到另一個表中的行。SQL列作爲行加入,PIVOT?

我有下面的表結構/結果。

假日表

日期| SusanCalladine | ClaireWillis | 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人)

電話表

CallDate |代理名稱| InboundCallsAnswered | InboundHandleTime
2016-08-22 |克萊爾威利斯| 0 | 0
2016-08-22 | Fazaila Pirbhai | 36 | 17484
2016-08-22 |蘇珊卡拉丁| 0 | 0
2016-08-23 |克萊爾威利斯| 12 | 4250
2016-08-23 | Fazaila Pirbhai | 16 | 23360
2016-08-23 |蘇珊卡拉丁| 0 | 0

任何幫助,將不勝感激,謝謝提前

回答

0

我希望這是你想要的。如果不是不要讓我知道

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 
+0

感謝您的幫助永源,它越來越接近我所需要的,基本上都是在假期表我需要總結的不同值的每個人,將其與電話表重新相同,然後對每個人的表中的值進行求和,每個表中有3個人,但是他們是一個表中的行和另一個表中的行,值年的日期等。 – w00t

+1

在那種情況下@ Yared的答案將工作正常,如果你unpivot假期表 – JonWay

0

您可以使用UNPIVOT從在假期表列讓行和DateAgentName列加入與電話的結果。

-- 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; 

結果將是:

enter image description here

+0

謝謝亞爾!這是 – w00t

+0

w00t的現貨,很高興你有你想要的 – Yared