如何动态地基于来自另一列的值创建新列

时间:2016-07-17 10:21:31

标签: sql-server

我想基于另一列中的值动态创建新列。

例如(水果和数量可能会不时更改,因此代码应该能够根据需要创建新列): 我可以做一个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

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上找到详细信息和示例

我希望它有所帮助