2016-08-10 4 views
0

Я работаю над запросом для создания view, который должен содержать агрегированные данные о продажах для клиентов, но новые данные о продажах добавляются как столбцы вместо строк. В таблице каждая строка представляет customer ID, а столбцы - «week of 20160808». Есть ли способ создать запрос в dynamically, чтобы добавить новые столбцы без жесткого кодирования имен столбцов (20160801+20160808+20160815)?SQL Query to Aggregate Growing Columns

+1

Помимо ** уродства ** создания динамического столбца, вы можете рассмотреть динамический SQL. – FDavidov

+0

, но 'dynamic 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 во взглядах. Если да, то вы можете попробовать это:

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

Например для таблицы

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 
) 

результат

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 
) 

же запрос будет get

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