「手動編碼」版本看起來類似於以下內容...如果需要動態版本,那麼也很容易。
IF OBJECT_ID('tempdb..#TestData', 'U') IS NOT NULL
DROP TABLE #TestData;
CREATE TABLE #TestData (
schedid INT,
Name VARCHAR(10),
isPresent CHAR(3),
[Date] date
);
INSERT #TestData (schedid, Name, isPresent, Date) VALUES
(1, 'James', 'Yes', '9/2/2017'),
(2, 'James', 'Yes', '9/3/2017'),
(3, 'James', 'Yes', '9/4/2017'),
(4, 'Rob ', 'Yes', '9/2/2017'),
(5, 'Rob ', 'Yes', '9/4/2017');
--==================================================
SELECT
td.Name,
[2017-09-02] = MAX(CASE WHEN td.[Date] = '2017-09-02' THEN td.isPresent ELSE '' END),
[2017-09-03] = MAX(CASE WHEN td.[Date] = '2017-09-03' THEN td.isPresent ELSE '' END),
[2017-09-04] = MAX(CASE WHEN td.[Date] = '2017-09-04' THEN td.isPresent ELSE '' END)
FROM
#TestData td
GROUP BY
td.Name;
結果...
Name 2017-09-02 2017-09-03 2017-09-04
---------- ---------- ---------- ----------
James Yes Yes Yes
Rob Yes Yes
[這](https://stackoverflow.com/questions/15931607/convert-rows-to-columns-using-pivot-in-sql-server)可能是你在找什麼。 – dotNET
Google sql server主鍵。這個案例有很多例子。 – scsimon