2014-02-18 155 views
-2

我有這樣的桌子;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 count和group by – 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