sql >> データベース >  >> RDS >> Sqlserver

1 行を列に変換する

    ピボット テーブルを確認してください。

    http://msdn.microsoft.com/en-us/library/ を参照してください。 ms177410.aspx

    有限数の StatusTypeNames に対する単純なクエリは次のようになります。

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

    MAX の使用に注意してください。月名とステータス タイプ名の組み合わせが同じ行が複数ある可能性がある場合は、SUM を使用することをお勧めします。

    madhivinan が提案するように動的列を利用するには、 この例 一番下までスクロールします。

    私はそれをあなたの例で動作させようとしましたが、おそらくテーブルがなかったためにいくつかの問題があったためです。ただし、次のようなものが目的です。

    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)
    

    正確ではありませんが、これが出発点です。

    頑張ってください。



    1. postgresql:イベントで期間を分割する

    2. カンマ区切りのフィールドをクエリしますか?

    3. 文字列の制約をチェックして、数字のみを含めます。 (Oracle SQL)

    4. postgresqlとの奇妙な照合