2014-02-17 1 views
3

멤버 수가 미지 인 팀 테이블이있는 경우 피벗 쿼리를 동적으로 만들 수있는 방법이 있습니까?알 수없는 열과 함께 피벗 테이블을 사용할 수 있습니까?

create table #t (
    team varchar (20), member varchar (20) 
) 
insert into #t values ('ERP', 'Jack') 
insert into #t values ('ERP', 'John') 
insert into #t values ('ERP', 'Mary') 
insert into #t values ('ERP', 'Tim') 
insert into #t values ('CRM', 'Robert') 
insert into #t values ('CRM', 'Diana') 

select * from #t 

select team, [1] as teamMember1, /* 1st select */ 
    [2] as teamMember2, [3] as teamMember3 
from 
(select team , member, row_number() /* 3rd select */ 
    over (partition by team order by team) as rownum 
from #t) a 
pivot (max(member) for rownum in ([1], [2], [3])) as pvt 

drop table #t 
+3

난 당신이 찾고있는 생각 : http://stackoverflow.com/questions/2922797/t-sql-pivot-possibility-of-creating 행 - 값 - 행 - 열 - 값. 동적 PIVOT을 작성하는 방법에 대한 Itzik Ben-Gan의 사례. –

답변

0

왜 그렇습니까? 몇 년 전에 비슷한 문제를 해결하기 위해 작성한 스크립트가 있습니다.이 스크립트는 사용자에게 Excel을 제공하고 내 손을 씻음으로써 궁극적으로 해결되었습니다. 귀하의 예제 데이터로 구성되지 않았 음을 사과드립니다. 그러나 따라하기 쉽기를 바랍니다. 도움이

희망,

--------------START QUERY-------------- 
-- Example Table 
CREATE TABLE #glbTestTable 
(
    ProviderID INT, 
    Total  INT, 
    PaymentDate SMALLDATETIME 
) 

--So the dates insert properly 
SET DATEFORMAT dmy 

-- Populate Example Table 
INSERT INTO #glbTestTable VALUES (232, 12200, '12/01/09') 
INSERT INTO #glbTestTable VALUES (456, 10200, '12/01/09') 
INSERT INTO #glbTestTable VALUES (563, 11899, '02/03/09') 
INSERT INTO #glbTestTable VALUES (221, 5239, '13/04/09') 
INSERT INTO #glbTestTable VALUES (987, 7899, '02/03/09') 
INSERT INTO #glbTestTable VALUES (1, 1234, '02/08/09') 
INSERT INTO #glbTestTable VALUES (2, 4321, '02/07/09') 
INSERT INTO #glbTestTable VALUES (3, 5555, '02/06/09') 

-- Raw Output 
SELECT * 
FROM #glbTestTable 

-- Build Query for Pivot -- 
DECLARE @pvtColumns VARCHAR(MAX) 
SET @pvtColumns = '' 

-- Grab up to the first 1023 "Columns" that we want to use in Pivot Table. 
-- Tables can only have 1024 columns at a maximum 
SELECT TOP 1023 @pvtColumns = @pvtColumns + '[' + CONVERT(VARCHAR, PaymentDate, 103) + '], ' 
FROM (SELECT DISTINCT PaymentDate FROM #glbTestTable) t_distFP 

-- Create PivotTable Query 
DECLARE @myQuery VARCHAR(MAX) 
SET @myQuery = ' 
SELECT ProviderID, ' + LEFT(@pvtColumns, LEN(@pvtColumns) - 1) + ' 
FROM (SELECT ProviderID, PaymentDate, Total 
    FROM #glbTestTable) AS SourceTable 
PIVOT 
(
    SUM(Total) 
    FOR PaymentDate IN (' + LEFT(@pvtColumns, LEN(@pvtColumns) - 1) + ') 
) AS PivotTable' 

-- Run the Pivot Query 
EXEC(@myQuery) 

-- Cleanup 
DROP TABLE #glbTestTable 
---------------END QUERY--------------- 
관련 문제