2016-09-20 8 views
1

私はここでピボットの答えを使って見つけた結果を使って作業を試みましたが、うまく動作しません。あるテーブルの列を別のテーブルの行に日付で結合しようとしています。行としてのSQL列、PIVOT?

私は以下のテーブル構造/結果を持っています。

休日テーブル

日|スーザンカラディン|クレアウィリス| 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 | |私は次の日に参加し、行しようとしています

テレフォニー表

CallDate(各日付は、別々の行で3人を持っています)エージェント名| InboundCallsAnswered | InboundHandleTime
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

すべてのヘルプは非常に、私はこれがあなたが望むものであると思い事前

答えて

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人の人がいますが、1つのテーブルの列と他のテーブルの列、年の価値など – w00t

+1

その場合あなたが休暇テーブルをアンピボットすると@ Yared答えがうまくいくでしょう – JonWay

0

を教えてくださいない場合は、休日テーブルの列から行を作成し、DateAgentName列で電話で結果を結合するためにUNPIVOTを使用することができます。

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

ありがとうYared !!それは – w00t

+0

w00tにあります – Yared