sql server 如何根据表1创建表2?

表1:

设计成表2这样的格式:

参考以下就行:

70.行列转换
--PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P
--
--完整语法:
--table_source
--PIVOT(
--聚合函数(value_column)
--FOR pivot_column
--IN(<column_list>)
--)
--例子.
--静态SQL(要求已知列名)
DECLARE @TB TABLE(ID INT ,VALUE1 NVARCHAR(50),VALUE2 NVARCHAR(50))
INSERT INTO @TB
SELECT 1,'A','S1' UNION ALL
SELECT 1,'B','S2' UNION ALL
SELECT 1,'C','S3' UNION ALL
SELECT 2,'A','S1' UNION ALL
SELECT 2,'B','S2' UNION ALL
SELECT 2,'C','S3'
SELECT * FROM (SELECT * FROM @TB) A
PIVOT (
MAX(VALUE2) FOR VALUE1 IN (A,B,C)--但这里写死了列名
) B
--eg.2
--动态SQL(由于用到字符串,因此表变量无法使用,改用临时表)
--DROP TABLE #TB
SELECT * INTO #TB FROM (
SELECT 1 id,'A' Value1,'S1' Value2 UNION ALL
SELECT 1,'B','S2' UNION ALL
SELECT 1,'C','S3' UNION ALL
SELECT 2,'A','S1' UNION ALL
SELECT 2,'B','S2' UNION ALL
SELECT 2,'C','S3')A
DECLARE @SQL VARCHAR(MAX)
SELECT @SQL = ISNULL(@SQL + '],[' , '') + Value1 from #TB GROUP BY Value1
SET @SQL = '[' + @SQL + ']'
EXEC ('SELECT * FROM (SELECT * FROM #TB) D PIVOT (MAX(VALUE2) FOR VALUE1 IN ('+@SQL+')) B')
温馨提示:答案为网友推荐,仅供参考
相似回答