SQl Server 2005: строки в столбцы - как решить эту проблему? - PullRequest
3 голосов
/ 29 июля 2010

Пожалуйста, дайте мне знать, как преобразовать следующие данные,

[id]  cost1  cost2    year 
   1      5     10    2010 
   1      4     15    2011 
   2     10     10    2010

в этот формат [строки 'Year' в заголовок столбцов]

id [cost1-2010] [cost2-2010] [cost1-2011] [cost2-2011] 
 1           5           10            4           15 
 2          10           10            0            0

Ответы [ 4 ]

3 голосов
/ 29 июля 2010
1 голос
/ 29 июля 2010

попробуйте что-то вроде этого:

DECLARE @YourTable table (id int, cost1 int, cost2 int, year int)
INSERT @YourTable VALUES (1,5,10,2010)
INSERT @YourTable VALUES (1,4,15,2011)
INSERT @YourTable VALUES (2,10,10,2010)

SELECT
    id
        ,SUM(CASE WHEN year=2010 THEN cost1 else 0 END) AS "Cost1-2010"
        ,SUM(CASE WHEN year=2010 THEN cost2 else 0 END) AS "Cost2-2010"
        ,SUM(CASE WHEN year=2011 THEN cost1 else 0 END) AS "Cost1-2011"
        ,SUM(CASE WHEN year=2011 THEN cost2 else 0 END) AS "Cost2-2010"
    FROM @YourTable
    GROUP BY id

OUTPUT

id          Cost1-2010  Cost2-2010  Cost1-2011  Cost2-2010
----------- ----------- ----------- ----------- -----------
1           5           10          4           15
2           10          10          0           0

(2 row(s) affected)
0 голосов
/ 29 июля 2010

Проверьте обсуждение на этот пост . Это вы должны были набрать.

0 голосов
/ 29 июля 2010

Если вы хотите сделать это динамически на основе данных, это будет сложнее, чем просто использование PIVOT.Для PIVOT или метода условной суммы

[2010Values] = ( SUM(Case when year = 2010 then FieldValue Else 0 End)

вы должны знать имя столбца заранее.

Если вы хотите установить имена столбцов динамически на основе полученных данных, то у вас будетидти по динамическому маршруту SQL, который может стать ужасным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...