sql >> Database teknologi >  >> RDS >> Sqlserver

konvertere en række til kolonner

Tjek pivottabeller;

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

En simpel forespørgsel efter et begrænset antal StatusTypeNames ville være noget i stil med;

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

Bemærk brugen af ​​MAX. Hvis der er en chance for, at du vil have flere rækker med den samme kombination af månedsnavn og statustypenavn, så vil du måske bruge SUM.

For at gøre brug af dynamiske kolonner, som madhivinan foreslår, kan du følge dette eksempel. Rul til bunden.

Jeg forsøgte at få det til at fungere med dit eksempel, men fordi jeg havde et par problemer, skyldes det sandsynligvis, at jeg ikke havde tabellerne. Men noget som det følgende er, hvad du leder efter.

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)

Det er ikke helt rigtigt, men det er et udgangspunkt.

Held og lykke.



  1. Hvordan kan jeg få alle oplysninger om en tabel i Oracle?

  2. Implicitte konverteringer og afrunding

  3. Hvordan ændrer jeg alle tomme strenge til NULL i en tabel?

  4. Fuld præcisionsoutput af flydende kommatyper i SQL Server Management Studio