2014-02-18 6 views
-2

У меня такой стол;Pivot in SQL 2008 R2

Date  PlacementName campaignID Impressions Clicks TotalConversions Activity 

01/01/2014 USA    100   5000   500  50  Mobile Book 
01/02/2014 U.K    101   7000   250  30  Mobile Book 
01/01/2014 USA    100   9000   800  40  Mobile TV 
01/02/2014 U.K    101   6000   300  10  Mobile TV

Я хочу сворачивать таблицу для 15-20 деятельности из реальной таблицы, потому что это только пример таблицы.

Я хочу, чтобы мой стол выглядел как внизу;

Date   PlacementName  CampaignID Impressions Clicks Mobile Book Mobile TV 
01/01/2014 USA    100   5000   500  50   NULL 
01/01/2014 U.K    100   9000   800  NULL   40 
01/02/2014 USA    101   7000   250  30   NULL 
01/02/2014 U.K    101   6000   300  NULL   10

Это формат, который я хочу в финальном столе. Я хочу написать запрос для этой таблицы.

+3

Что СУБД вы используете? Какие исследования вы сделали? Вы предпринимали какие-либо попытки решить вашу проблему? – Kermit

+0

Посмотрите на количество и группу sql по – gerrytan

+0

@FreshPrinceOfSO: если вы не можете ответить, пожалуйста, не уменьшайте мои очки. Я очень новичок в этой среде, и если не хочу помогать, не помогайте сэру, но не понижайте мою репутацию. – ADBI

ответ

2

Самый простой способ получить результат - использовать функцию агрегата вместе с выражением CASE для преобразования строк данных в столбцы, но вы также можете применить функцию PIVOT.

select date, 
    placementname, 
    campaignid, 
    impressions, 
    clicks, 
    sum(case when activity = 'Mobile Book' then TotalConversions else 0 end) MobileBook, 
    sum(case when activity = 'Mobile TV' then TotalConversions else 0 end) MobileTV 
from yourtable 
group by date, placementname, campaignid, impressions, clicks; 

См SQL Fiddle with Demo

select date, placementname, 
    campaignid, impressions, 
    clicks, 
    [Mobile Book], [Mobile TV] 
from 
(
    select date, placementname, 
    campaignid, impressions, 
    clicks, activity, totalconversions 
    from yourtable 
) d 
pivot 
(
    sum(totalconversions) 
    for activity in ([Mobile Book], [Mobile TV]) 
) p 

См SQL Fiddle with Demo

+0

Большое спасибо, ваше решение отлично работает для меня. Огромное спасибо. Тем не менее, я пробовал первый, потому что второй, который я уже пробовал, но результат пришел с ошибкой. Еще раз спасибо. – ADBI

+1

@ADBI: Вы знакомы с принятием ответов? Я не думаю, что вы приняли их в своем профиле, но похоже, что вы несколько раз прокомментировали, что что-то действительно сработало. Чтобы «принять», нажмите на значок галочки слева от соответствующего ответа, чтобы он стал зеленым. Думаю, это даст вам один или два момента, и, что еще важнее, спасибо благодарному человеку. – halfer