1
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 sta Tement говоря, если contact_id дали в подарок в 2006 году затем присвоить 1 еще 0 - так что для одного контакта вся информация содержится в одном ряду
Заранее спасибо :)
Когда я пытаюсь это я получите сообщение о том, что date_created не входит в состав агрегации, и когда я добавляю его, он создает повторяющиеся строки для каждого contact_id. Кроме того, я слышал от некоторых примеров, что операторы CASE являются наиболее эффективными, если все эти вложенные операторы CASE замедляют работу? - Спасибо, – Dibstar
@ Давин - Ну, это основная идея. Поскольку вы не предоставляли DDL (создание операторов таблицы) в своем сообщении, я не тестировал его в этом конце. Если вы отредактируете свой вопрос, чтобы включить скрипт create table для подарков, я сделаю это. Это единственный разумный способ сделать это. Оператор 'Pivot' является в основном синтаксическим сахаром для этого подхода. –
Кстати, я просто испытал это в этом конце и вообще не получил такой ошибки. Вы уверены, что ничего не изменили? –