2016-04-09 11 views
0

Der Versuch, eine Ansicht mit einem PIVOT darin zu erstellen, kann die Syntax nicht herausfinden. Die Quellansicht hat drei Spalten: ClientNameID, Item und CountOfItem. Ich möchte, dass ClientNameID die Zeile, Item die Spalte und CountOfItem der Wert ist.SQL PIVOT-Syntax ist falsch

This the view I tried

+1

bitte auf die Bücher beziehen Online https://technet.microsoft.com/en-us/library/ms177410%28v=sql.105%29.aspx auf korrekte Syntax für PIVOT – Squirrel

+1

@ Squirrel Genius. Ich kann mir nicht vorstellen, warum ich nicht daran gedacht habe. – nicomp

Antwort

0

I es herausgefunden: Ich habe auch gelernt, dass die Dimensionen (Spalten) müssen hart codiert in der DML

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

Das Problem Syntax BUT war. Ich wollte die Dimensionen dynamisch aus einer Tabelle, die in Excel machbar ist, mit einem Spaltenbereich holen, aber nicht hier.

+0

um dynamische Dimensionen zu erhalten, benötigen Sie 'Dynamic SQL' Sie können' sys.columns' oder 'INFORMATION_SCHEMA.COLUMNS' abfragen, um die Liste der Spaltennamen zu erhalten – Squirrel

0

Ich denke, du solltest das versuchen. seine für Sie gearbeitet ..

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);