原版資料源:使用的是Sql server 08版本
姓名 注冊時間 申請時間
李三 2019-01-01 2019-02-03
李三 2019-01-01 2019-03-03
李三 2019-01-01 2019-04-03
李三 2019-01-01 2019-05-03
切換成
姓名 注冊時間 申請時間1 申請時間2 申請時間3 申請時間4
李三 2019-01-01 2019-02-03 2019-03-03 2019-04-03 2019-05-03
uj5u.com熱心網友回復:
--建表
CREATE TABLE #T
(
姓名 VARCHAR(10),
注冊時間 DATE,
申請時間 date
)
--添加測驗資料
INSERT INTO #T VALUES('李三', '2019-01-01', '2019-02-03')
INSERT INTO #T VALUES('李三', '2019-01-01', '2019-03-03')
INSERT INTO #T VALUES('李三', '2019-01-01', '2019-04-03')
INSERT INTO #T VALUES('李三', '2019-01-01', '2019-05-03')
INSERT INTO #T VALUES('王五', '2019-01-02', '2019-02-03')
INSERT INTO #T VALUES('王五', '2019-01-02', '2019-03-03')
--動態行列轉換
DECLARE @max INT
DECLARE @pivot VARCHAR(4000)=''
DECLARE @filed VARCHAR(4000)=''
DECLARE @sql VARCHAR(8000)
SELECT @max=MAX(A) FROM
(
SELECT COUNT(1) AS A FROM #T GROUP BY 姓名,注冊時間
) A
SELECT @pivot=@pivot+','+QUOTENAME(number),@filed=@filed+','+QUOTENAME(number)+' AS 申請時間'+CONVERT(VARCHAR(10),number)
FROM master..spt_values WHERE type='P' AND number BETWEEN 1 AND @max
SET @sql='
SELECT 姓名,注冊時間'+@filed+' FROM
(
SELECT *,ROW_NUMBER() OVER(PARTITION BY 姓名,注冊時間 ORDER BY 申請時間) AS id FROM #T
) A
PIVOT
(
MAX(申請時間)
FOR id IN ('+STUFF(@pivot,1,1,'')+')
)P'
EXEC(@sql)
DROP TABLE #T
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/8413.html
標籤:疑難問題
