2014-07-07 2 views
0

좋아 측면을 가고있다, 그래서 나는 이런 식으로 뭔가를 보이는 테이블이 :SQL 피벗 테이블 때문에 선택 열

Table 20140706 20140705 20140704 20140703 
Table_1 23   45   21   98 
Table_2 11   65   53   22 
Table_3 54   65   32   21 
... 
:

Date  Table_1 Table_2 Table_3 ... Table_20 
20140706 23   11   54    78 
20140705 45   65   65    9 
20140704 21   53   32    56 
20140703 98   22   21    21 
... 

내가 수행하고자하는 것은 다음과 같습니다 뭔가

필자는 Pivot Tables를 처음 접했고 어디서부터 시작해야할지 모르겠습니다. 피벗 테이블 기사의 대부분의 시간부터 합계 또는 단일 피벗 지점을 필요로하므로 전체 피벗 장면이 어떻게 작동하는지 잘 알지 못합니다. 어떤 도움을 주셔서 감사합니다.

+0

이 데이터베이스 층에서 아래로 일을해야 확실 : 여기

내 코드? SQL에서 필요하다면 - 열과 행 세트가 고정되어 있습니까? SQL은 일반적으로 다양한 수의 열을 가진 결과 세트를 생성하는 것을 원하지 않습니다. 따라서 조정해야하는 경우 제품 별 일 것입니다.이 경우 어떤 데이터베이스 제품을 사용하고 있습니까? [tag : sql] 태그는 표준 SQL 언어 용 태그입니다. –

+0

예, SQL 수준에서 수행해야합니다. 그리고 예 (테이블 이름)의 열 수는 고정되어 있으며 마지막 7 일 동안 행 수가 고정됩니다. (테이블은 하루 종일 유지되지만 지난 7 개만 필요합니다.) – Caveman42

+0

출력 열의 * 이름 *이 변경 될 예정입니까? 그것은 또한 SQL이 좋아하는 것이 아닙니다. 그래서, 다시, 어떤 제품을 가지고 일하고 있습니까? –

답변

0

궁금한 분은 내가보고 싶었던 날짜를 설정하기 위해 조합 변수를 사용하여 원하는 결과를 얻었습니다. unpivotpivot 테이블의 엉망으로 내가 필요한 방식으로 테이블을 배치하십시오. 당신은 프리젠 테이션의 요구 처리에 더 적합한 다른 계층이없는 -

declare @d1 varchar(10) = CAST(DATEADD(dd,-1,CAST(GETDATE() as Date)) as varchar(10)) 
declare @d2 varchar(10) = CAST(DATEADD(dd,-2,CAST(GETDATE() as Date)) as varchar(10)) 
declare @d3 varchar(10) = CAST(DATEADD(dd,-3,CAST(GETDATE() as Date)) as varchar(10)) 
declare @d4 varchar(10) = CAST(DATEADD(dd,-4,CAST(GETDATE() as Date)) as varchar(10)) 
declare @d5 varchar(10) = CAST(DATEADD(dd,-5,CAST(GETDATE() as Date)) as varchar(10)) 
declare @d6 varchar(10) = CAST(DATEADD(dd,-6,CAST(GETDATE() as Date)) as varchar(10)) 
declare @d7 varchar(10) = CAST(DATEADD(dd,-7,CAST(GETDATE() as Date)) as varchar(10)) 
declare @SQL varchar(8000) 

SET @SQL = 
'Select 
    * 
From 
    (
    Select 
     unpvt.[Table] 
     ,unpvt.value 
     ,unpvt.Date 
    From 
     ORIGINAL_TABLE 
     unpivot (
      value 
      for [Table] in (Table_1 
       ,Table_2 
       ,Table_3 
       ,... 
       ,Table_35 
      ) 
     ) unpvt 
    Where 
     Date > cast(dateadd(dd,-8,getdate()) as date) 
    ) ref 
    pivot (sum(ref.value) 
     for ref.Date in (
      [' + @d1 + '] 
      ,[' + @d2 + '] 
      ,[' + @d3 + '] 
      ,[' + @d4 + '] 
      ,[' + @d5 + '] 
      ,[' + @d6 + '] 
      ,[' + @d7 + '] 
     ) 
    ) as pvt' 

EXEC(@SQL)