sql >> Databasteknik >  >> RDS >> Sqlserver

konvertera en rad till kolumner

Kolla in pivottabeller;

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

En enkel fråga för ett ändligt antal StatusTypeNames skulle vara ungefär som;

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

Observera användningen av MAX. Om det finns en chans att du kommer att ha flera rader med samma månadsnamn och statustypnamnskombination, kanske du vill använda SUM.

För att använda dynamiska kolumner som madhivinan föreslår kan du följa det här exemplet. Bläddra till botten.

Jag försökte få det att fungera med ditt exempel, men eftersom jag hade ett par problem troligen på grund av att jag inte hade tabellerna. Men något i stil med följande är vad du är ute 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 är inte helt rätt, men det är en utgångspunkt.

Lycka till.



  1. Uppdatera värden från MYSQL-tabellen utan att ladda om sidan?

  2. Mysql-händelsefel med php

  3. Kan jag blanda MySQL API:er i PHP?

  4. rails + MySQL på OSX:Biblioteket är inte laddat:libmysqlclient.18.dylib