2016-08-10 1 views
0

고객을위한 집계 된 판매 데이터가 있어야하지만 행 대신 열로 새 판매 데이터가 추가되어야하는 view을 만드는 쿼리를 작성하고 있습니다. 표에서 각 행은 customer ID이고 열은 "week of 20160808"입니다. 이미 dynamically 열 이름을 하드 코딩하지 않고 추가 된 새로운 열을 캡처하는 쿼리를 만드는 방법이 있습니까 (20160801+20160808+20160815)?SQL 쿼리로 성장하는 열 집계

+1

** 동적 컬럼 생성 ** ** ** 외에도 동적 SQL을 고려할 수 있습니다. – FDavidov

+0

하지만'동적 SQL '은'보기'에서 작동하지 않습니다 – Squirrel

+0

보기 여야합니까? 저장 프로 시저 또는 함수는 어떻습니까? 그러나 심각하게 최우선 순위 - 이것은 가능한 최악의 테이블 디자인에 관한 것이며 문제의 끝을주지 않을 것입니다 –

답변

0

나는 그것은 당신에게 최고의라는 이름의 열을 제공하지 않습니다

SELECT Year(DateOfSale), CustomerId, [1] ... [52] FROM YourDataTable 
Pivot(sum(sales) FOR WeekNumber IN (1..52)) as Pivoted 

같은 일을 할 것입니다,하지만 당신이 그것을 표시 할 때 당신은을 정돈 할 수있다.

0

XQuery가보기에 허용되는지는 알지 못합니다. 그렇다면, 당신이 시도 할 수 : 테이블

with MyTable(CustId, week0, week1, week2) as (
    select 1, 1,2,3 
    union all 
    select 2, 1.50, 2.25, 3.01 
    union all 
    select 3, 111.11, 222.22, 555.55 
) 

에 대한 예를 들어

select CustId, 
    (select * from MyTable where CustId = x.CustId for xml path('row'), type).value('sum(row/*[not(self::CustId)])','float') 
from MyTable x 

하여 결과

CustId  
----------- ---------------------- 
1   6 
2   6,76 
3   888,88 

with MyTable(CustId, week0, week1, week2, week3) as (
    select 1, 1,2,3,4 
    union all 
    select 2, 1.50, 2.25, 3.01, 0 
    union all 
    select 3, 111.11, 222.22, 333.33, 1000 
) 

동일한 쿼리 것 테이블입니다

CustId  
----------- ---------------------- 
1   10 
2   6,76 
3   1888,88