Tôi đã kiểm tra thông tin đăng công nghệ của bạn tại đây và tôi thấy rằng bạn không muốn sử dụng PIVOT vì nó chỉ trả về kết quả tổng hợp. UNPIVOT sẽ đưa bạn đến rất gần những gì bạn đang tìm kiếm và sau đó chỉ cần thực hiện một phép nối trên bảng cho mỗi cột. Tôi đã làm một ví dụ với dữ liệu bạn cung cấp bên dưới:
----Create the table and insert values as portrayed in the previous example.
CREATE TABLE pvt (EmpId int, Day1 char(1), Day2 char(1), Day3 char(1));
CREATE TABLE pvt2 (EmpId int, DayNum CHAR(4), DayNums CHAR(4));
GO
INSERT INTO pvt VALUES (1,'A','P','P');
INSERT INTO pvt VALUES (2,'P','P','P');
GO
--Unpivot the table.
INSERT INTO pvt2
SELECT EmpId,DayNum, DayNums
FROM
(SELECT EmpId, Day1, Day2, Day3
FROM pvt) p
UNPIVOT
(DayNums FOR DayNum IN
(Day1,Day2,Day3)
)AS unpvt;
GO
SELECT
a.DayNum,
a.DayNums,
b.DayNums
FROM pvt2 a
JOIN pvt2 b ON a.DayNum = b.DayNum
AND a.EmpId=1
AND b.EmpId = 2
Chạy đoạn mã trên sẽ trả về:
Exp 1 2 3 as EmpId
----------
Day1 A P ....
Day2 P P ...
Day3 P P ...
Giải pháp khác duy nhất mà tôi biết là SQL động và nó chậm hơn và có nhiều nguy hiểm. Tuy nhiên, nếu bạn đang chạy một lần mã cũng có thể hoạt động.