2011-06-14 10 views
1

나는 다음과 같은 데이터가 있습니다. 나는 16 개 필드를SQL 피벗 테이블

INSERT INTO @SpeciInfo 
(ID, [Custom1], [Custom2], [Custom3], [Custom4], [Custom5],[Custom6],[Custom7],[Custom8],[Custom9],[Custom10],[Custom11],[Custom12],[Custom13],[Custom14],[Custom15],[Custom16]) 
    SELECT 
     ID, 
     [Custom1], 
     [Custom2], 
     [Custom3], 
     [Custom4], 
     [Custom5], 
     [Custom6], 
     [Custom7], 
     [Custom8], 
     [Custom9], 
     [Custom10], 
     [Custom11], 
     [Custom12], 
     [Custom13], 
     [Custom14], 
     [Custom15], 
     [Custom16] 
    FROM SpeciInfo) p 
    PIVOT 
    (
     (
      [Custom1], 
      [Custom2], 
      [Custom3], 
      [Custom4], 
      [Custom5], 
      [Custom6], 
      [Custom7], 
      [Custom8], 
      [Custom9], 
      [Custom10], 
      [Custom11], 
      [Custom12], 
      [Custom13], 
      [Custom14], 
      [Custom15], 
      [Custom16] 
     ) 
    ) AS pvt 
    ORDER BY ID; 

필요하지만, 나는 '만약 내가 From 절에서하는 또는 정확히 무엇 확실하지 않다 : 지금까지 다음 쿼리를 한

ID Custom1  Custom2 Custom3 Custom4.......... 
1  tera  add   alkd  
2  adf  add 
3  wer 
4  minus  add   ten 

: 그래서 다음과 같이 그걸 제대로하고 있니? 이다

감사 동적으로 열을 구축하는 것입니다 무엇을 추구, 즉 종종 동적 크로스 탭이라고하며 (쿼리 문자열을 구축) 동적 SQL에 의존하지 않고 T-SQL에서 수행 할 수없는 경우

답변

2

권장하지 않습니다. 대신 중간 계층 또는보고 응용 프로그램에서 해당 쿼리를 작성해야합니다.

당신은 단순히 정적 솔루션, 당신은 SQL Server 2005 또는 이후 버전에서 다음처럼 보일 수도 있습니다 무엇을 추구의 PIVOT 사용하는 대신하려는 경우 :

With NumberedItems As 
    (
    Select Id, Data 
     , Row_Number() Over(Partition By Id Order By Data) As ColNum 
    From SpeciInfo 
    ) 
Select Id 
    , Min(Case When Num = 1 Then Data End) As Custom1 
    , Min(Case When Num = 2 Then Data End) As Custom2 
    , Min(Case When Num = 3 Then Data End) As Custom3 
    , Min(Case When Num = 4 Then Data End) As Custom4 
    ... 
From NumberedItems 
Group By Id 

원래의 데이터에 하나의 심각한 문제가 있음이를 시퀀스의 표시기가 없으므로 시스템이 Custom2 열과 반대로 Custom1 열에 표시 할 ID에 대한 항목을 알 수있는 방법이 없습니다. 위의 쿼리에서 임의로 이름순으로 정렬했습니다.