2016-07-17 3 views
0

다른 열의 값을 기준으로 동적으로 새 열을 만들고 싶습니다.동적으로 다른 열의 값을 기반으로 새 열을 만드는 방법

예를 들어 (과일 및 수량이 때때로 변경되어 코드가 필요에 따라 새로운 열을 생성 할 수 있도록) 두 개의 새로운 열을 작성하기 위해 case 문을 사용할 수 있습니다. 바나나, Apple.But 어떻게하면 동적으로 할 수 있습니까? - 즉 내일에는 "멜론 (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

[pivot] (https://msdn.microsoft.com/en-us/library/ms177410.aspx)을 통해 행을 열로 변환하려고합니다. 그러나 동적으로 열을 만들려면 한 단계 더 나아가 [동적 SQL] (https://msdn.microsoft.com/en-us/library/ms188001.aspx) 문을 작성해야합니다. 이것은 Pivot이 열 정의 (예 : 정적)를 기대하기 때문에, 'FRUIT' 데이터에서 동적으로 만들지 않기 때문입니다. 일반적으로 데이터를 표시 (즉, 표시)하는 데 사용하는 도구에서 피벗을 수행하는 것이 더 쉽고 실용적입니다. –

답변

1

당신은 당신은 내가 희망

참조 SQL 서버 튜토리얼에서 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 피벗 쿼리 다음 시도하십시오 수 도움이

관련 문제