2016-08-10 18 views
0

私は、顧客の集計された売上データを含む必要があるviewを作成するためのクエリを作成していますが、新しい売上データは行ではなく列として追加されます。この表では、各行はcustomer IDを表し、列は「week of 20160808」です。 dynamicallyへのクエリを作成する方法は、列名(20160801+20160808+20160815)をハードコーディングせずに追加された新しい列をキャプチャしますか?SQLクエリを集計している列を集計する

+1

動的列作成の**醜さ**の他に、動的SQLも考えられます。 – FDavidov

+0

しかし、 '動的なsql'は' view'では動作しません – 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