2016-07-17 11 views
0

別の列の値に基づいて新しい列を動的に作成したいとします。別の列の値に基づいて新しい列を動的に作成する方法

たとえば、(果物と量は必要に応じて新しい列を作成できるように、時々変更されることがあります) 2つの新しい列を作成するためにcase文を実行できます。バナナ、Apple.Butどのように私はそれを動的に行うことができますか? - 明日、私は "メロン"のような新しいフルーツを手に入れるか、果物を1つ省略します。

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

[ピボット](https://msdn.microsoft.com/en-us/library/ms177410.aspx)で行を列に変換する必要があります。ただし、列を動的に作成する必要があるため、さらに進んで[動的SQL](https://msdn.microsoft.com/en-us/library/ms188001.aspx)ステートメントを作成する必要があります。これは、ピボットが列を定義することを期待している(静的な)ため、「FRUIT」データから列を動的に作成しないためです。一般に、データを表示(すなわち表示)するために使用するツールでピボットを行う方が簡単で実用的です。 –

答えて

1

あなたは、私が期待し

参照SQL Serverのチュートリアルでdynamic SQL pivot queryの詳細とサンプルを見つけることができます

--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ピボットクエリ以下試してくださいでした助けてください

関連する問題