2016-04-09 5 views
0

Попытка создать представление с помощью PIVOT в нем, не может понять синтаксис. В исходном представлении есть три столбца: ClientNameID, Item и CountOfItem. Я хочу, чтобы идентификатор ClientNameID был строкой, Item - столбцом, а CountOfItem - значением.Синтаксис SQL PIVOT неверен

This the view I tried

+1

пожалуйста, обратитесь к книгам онлайн https://technet.microsoft.com/en-us/library/ms177410%28v=sql.105%29.aspx на правильный синтаксис для PIVOT – Squirrel

+1

@Squirrel Genius. Я не могу представить, почему я об этом не думал. – nicomp

ответ

0

Я понял это:

SELECT  clientnameid 
FROM   dbo.vAggregateSalesByCustomerAndItem 
pivot (
    Sum(countOfItem) FOR Item in ([Ring]) 
) PivotTable 

Проблема была синтаксис НО Я также узнал, что размеры (столбцы) должны быть жестко закодированы в DML. Я хотел динамически получать размеры из таблицы, которая работает в Excel, с диапазоном столбцов, но не здесь.

+0

, чтобы получить размеры динамически, вам понадобится 'Dynamic SQL'. Вы можете запросить' sys.columns' или 'INFORMATION_SCHEMA.COLUMNS', чтобы получить список имен столбцов – Squirrel

0

Я думаю, вы должны попробовать это. его работал для вас ..

DECLARE @cols AS NVARCHAR(MAX), 
     @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT DISTINCT ',' + Item 
         from dbo.vAggregateSalesByCustomerAndItem 
         FOR XML PATH(''), TYPE 
        ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'') 

set @query = 'SELECT clientnameid ' + @cols + ' from 
     (
      select clientnameid,countOfItem,Item 
      from dbo.vAggregateSalesByCustomerAndItem 
     ) x 
     pivot 
     (
      Sum(countOfItem) 
      for Item in (' + @cols + ') 
     ) p ' 

    execute(@query);