我想基于另一列中的值动态创建新列。
例如(水果和数量可能会不时更改,因此代码应该能够根据需要创建新列): 我可以做一个case语句来创建两个新列:Banana,Apple。但我怎么能动态地做呢? - 即明天我会得到一种新的水果,如#34; Melon"或者一个水果将被省略。
ID FRUIT QUANTITY
22 Banana 5
33 Banana 1
44 Apple 3
输出
ID FRUIT QUANTITY Banana Apple
22 Banana 5 1 0
33 Banana 1 1 0
44 Apple 3 0 1
答案 0 :(得分:1)
请问您可以尝试遵循动态SQL数据透视查询
--create table FruitQty (ID int, FRUIT varchar(25), QUANTITY int)
--insert into FruitQty select 1,'Melon',5
--insert into FruitQty select 2,'Apple',3
--insert into FruitQty select 3,'Apple',5
DECLARE @Fruits nvarchar(max)
SELECT @Fruits =
STUFF(
(
select distinct ',[' + Fruit + ']'
from FruitQty
for xml path('')
),
1,1,'')
DECLARE @SQL nvarchar(max)
SELECT @SQL = N'
select
*
from (
select
FRUIT,
QUANTITY
from FruitQty
) Data
PIVOT (
SUM(QUANTITY)
FOR FRUIT
IN (
' + @Fruits + '
)
) PivotTable
'
exec sp_executesql @SQL
您可以在引用的SQL Server教程
上的dynamic SQL pivot query上找到详细信息和示例我希望它有所帮助