sql >> Databáze >  >> RDS >> Sqlserver

převést jeden řádek na sloupce

Podívejte se na kontingenční tabulky;

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

Jednoduchý dotaz na konečný počet StatusTypeNames by byl něco jako;

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

Všimněte si použití MAX. Pokud existuje možnost, že budete mít více řádků se stejnou kombinací názvu měsíce a názvu typu stavu, možná budete chtít použít SUM.

Chcete-li využívat dynamické sloupce, jak navrhuje madhivinan, můžete sledovat tento příklad. Přejděte dolů.

Snažil jsem se, aby to fungovalo s vaším příkladem, ale protože jsem měl několik problémů, pravděpodobně kvůli tomu, že jsem neměl tabulky. Jde vám však o něco jako následující.

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)

Není to úplně správné, ale je to výchozí bod.

Hodně štěstí.



  1. Lehké nákupní dobrodružství

  2. Datový model aplikace pro maratonský trénink

  3. Nahraďte část řetězce ekvivalentem s velkými písmeny z tabulky cross ref temp - tsql

  4. Jak obnovit pg_restore