您可以使用 UNPIVOT 从 Holiday 表中的列中创建行,并通过 Date 和 AgentName 列将结果与 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;
结果将是: