поворот на две колонны - PullRequest
       3

поворот на две колонны

1 голос
/ 20 августа 2010

HI, Используя SQL Server 2005 у меня следующий запрос:

SELECT 
contact_id      
,YEAR(date_created)         AS giftyear
,SUM(amount_exc_vat)        AS year_total_xGA
,SUM(amount_inc_vat)        AS year_total_inGA
,COUNT(*) AS numGifts 
FROM gifts 
GROUP BY contact_id 
,Year(date_created)

, который возвращает данные, которые выглядят так:

contact_id  |  giftyear  | year_total_xVAT  |year_total_inVAT  |  numGifts
id001      |    2006    |   17.00          |      21.79       |     4
id001      |    2007    |   5.00           |    6.41          |     1
id001       |   2008    |   5.00           |       6.41       |     1

Затем я хочу повернуть эти данные, чтобы таблица выглядела следующим образом

contact_id  |  gift_2006  |  2006_excVAT  | 2006_incVAT  | 2007gifts | 2007_excVAT  |  2007_incVAT | gift_2008  |  2008_excvat  |  2008_incvat
id001       |    1        |     17.00     |    21.79     |  1        |    5.00      |  6.41         |    1       |    5.00       |    6.41

Таким образом, если gift_2006 и т. Д. - это, по сути, оператор CASE, в котором говорится, что если contact_id подарил подарок в 2006 году, тогда присвойте 1, иначе 0, чтобы для одного контакта вся информация содержалась в одной строке

Заранее спасибо:)

1 Ответ

2 голосов
/ 20 августа 2010
SELECT 
contact_id,   
 CASE WHEN COUNT(CASE WHEN YEAR(date_created) = 2006 THEN 1 END) > 0 THEN 1 ELSE 0 END AS gift_2006,
SUM(CASE WHEN YEAR(date_created) = 2006 THEN amount_exc_vat END) AS [2006_excVAT] ,
SUM(CASE WHEN YEAR(date_created) = 2006 THEN amount_inc_vat END) AS [2006_incVAT] ,
CASE WHEN COUNT(CASE WHEN YEAR(date_created) = 2007 THEN 1 END) > 0 THEN 1 ELSE 0 END AS gift_2007,
SUM(CASE WHEN YEAR(date_created) = 2007 THEN amount_exc_vat END) AS [2007_excVAT] ,
SUM(CASE WHEN YEAR(date_created) = 2007 THEN amount_inc_vat END) AS [2007_incVAT] ,
CASE WHEN COUNT(CASE WHEN YEAR(date_created) = 2008 THEN 1 END) > 0 THEN 1 ELSE 0 END AS gift_2008,
SUM(CASE WHEN YEAR(date_created) = 2008 THEN amount_exc_vat END) AS [2008_excVAT] ,
SUM(CASE WHEN YEAR(date_created) = 2008 THEN amount_inc_vat END) AS [2008_incVAT] 
FROM gifts 
GROUP BY contact_id 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...