sql >> Database >  >> RDS >> Sqlserver

zet één rij om in kolommen

Bekijk draaitabellen;

Zie http://msdn.microsoft.com/en-us/library/ ms177410.aspx

Een eenvoudige query voor een eindig aantal StatusTypeNames zou zoiets zijn als;

SELECT * FROM 
(SELECT MonthName, StatusTypeName as attributeCol, StatusCount FROM @ResultsTable) rt 
PIVOT ( MAX(StatusCount) FOR attributeCol in ([ToBeScheduled],[Complete])) as pvt
ORDER BY MonthName

Let op het gebruik van MAX. Als de kans bestaat dat je meerdere rijen hebt met dezelfde combinatie van maandnaam en statustypenaam, dan wil je misschien SUM gebruiken.

Om gebruik te maken van dynamische kolommen, zoals madhivinan suggereert, kun je dit voorbeeld. Scroll naar beneden.

Ik heb geprobeerd het te laten werken met je voorbeeld, maar omdat ik een paar problemen had, waarschijnlijk omdat ik de tabellen niet had. U bent echter op zoek naar iets als het volgende.

DECLARE @listCol VARCHAR(2000)
DECLARE @query VARCHAR(4000)
SELECT  @listCol = SELECT STUFF (( SELECT DISTINCT '],[' + 
                    StatusTypeName FROM @ResultsTable ORDER BY '],[' + 
                    StatusTypeName FOR XML PATH ('')), 1, 2, '') + ']'


SET @query =
'SELECT * FROM
      (SELECT MonthNameCol, StatusTypeName as attributeCol, StatusCount FROM @ResultsTable) rt
PIVOT ( MAX(StatusCount) FOR attributeCol in ('[email protected]+')) AS pvt ORDER BY MonthNameCol'

EXECUTE (@query)

Het klopt niet helemaal, maar het is een beginpunt.

Veel succes.



  1. Voeg gegevens in mysql-kolom in met spaties met php

  2. Krijg accountgegevens in Oracle met behulp van functie

  3. 2 tabellen samenvoegen voor een SELECT-query?

  4. Hoe varchar naar boolean te casten