22,209
社区成员
发帖
与我相关
我的任务
分享
IF OBJECT_ID(N'TEMPDB.DBO.#T') IS NOT NULL
DROP TABLE #T
GO
CREATE TABLE #T
(CSTID VARCHAR(20),
DATE VARCHAR(20),
RESULT VARCHAR(20),
COUNT VARCHAR(5),
LEFT_1_01 DECIMAL(12,4),
LEFT_1_02 DECIMAL(12,4),
LEFT_1_03 DECIMAL(12,4))
INSERT INTO #T
SELECT 'CHA052','2019-01-07 9:51','NG',1,10.2577,93.9259,173.9259 UNION ALL
SELECT 'THA298','2019-01-07 9:25','NG',1,9.594,92.5866,173.2533 UNION ALL
SELECT 'THF006','2019-01-07 8:50','NG',1,9.2562,92.9155,172.9155 UNION ALL
SELECT 'CHA011','2019-01-07 8:22','NG',1,10.9303,94.2914,174.2518
DECLARE @SQL VARCHAR(MAX)
WITH CTE_1
AS
(SELECT 'CSTID' AS CSTID,'DATE' AS [DATE],'RESULT' AS RESULT,'COUNT' AS COUNT,
'LEFT_1_01' AS LEFT_1_01,'LEFT_1_02' AS LEFT_1_02,'LEFT_1_03' AS LEFT_1_03,0 AS SEQ
UNION ALL
SELECT CSTID,CAST(DATE AS VARCHAR(20)),RESULT,CAST(COUNT AS VARCHAR(20)),
CAST(LEFT_1_01 AS VARCHAR(20)),CAST(LEFT_1_02 AS VARCHAR(20)),CAST(LEFT_1_03 AS VARCHAR(20)),
ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS SEQ FROM #T),
CTE_2
AS
(SELECT SEQ,VALUE,
ROW_NUMBER() OVER (PARTITION BY SEQ ORDER BY (SELECT 1)) AS SEQ_2
FROM CTE_1
UNPIVOT
([VALUE] FOR [NAME] IN ([CSTID],[DATE],[RESULT],[COUNT],[LEFT_1_01],[LEFT_1_02],[LEFT_1_03]))B)
SELECT @SQL=ISNULL(@SQL+',','')+
'MAX(CASE WHEN SEQ='''+CAST(SEQ AS VARCHAR)+''' THEN VALUE ELSE '''' END) AS '+'NAME_'+CAST(SEQ AS VARCHAR)
FROM (SELECT DISTINCT SEQ FROM CTE_2) AS A
SELECT @SQL='WITH CTE_1
AS
(SELECT ''CSTID'' AS CSTID,''DATE'' AS [DATE],''RESULT'' AS RESULT,''COUNT'' AS COUNT,
''LEFT_1_01'' AS LEFT_1_01,''LEFT_1_02'' AS LEFT_1_02,''LEFT_1_03'' AS LEFT_1_03,0 AS SEQ
UNION ALL
SELECT CSTID,CAST(DATE AS VARCHAR(20)),RESULT,CAST(COUNT AS VARCHAR(20)),
CAST(LEFT_1_01 AS VARCHAR(20)),CAST(LEFT_1_02 AS VARCHAR(20)),CAST(LEFT_1_03 AS VARCHAR(20)),
ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS SEQ FROM #T),
CTE_2
AS
(SELECT SEQ,VALUE,
ROW_NUMBER() OVER (PARTITION BY SEQ ORDER BY (SELECT 1)) AS SEQ_2
FROM CTE_1
UNPIVOT
([VALUE] FOR [NAME] IN ([CSTID],[DATE],[RESULT],[COUNT],[LEFT_1_01],[LEFT_1_02],[LEFT_1_03]))B)
SELECT SEQ_2,'+@SQL+' FROM CTE_2 GROUP BY SEQ_2'
EXEC(@SQL)