2014-02-28 424 views
0

使用SQL Server 2008,查找一個表,但查找特定的輸出。當前的表,命名fmCalendar:SQL Server 2008中的「交叉表」查詢

>Date  Calendar Days 
>12/30/2014 Canada  1 
>12/30/2014 Europe  1 
>12/30/2014 UK   1 
>12/30/2014 US   1 
>12/29/2014 Canada  2 
>12/29/2014 Europe  2 
>12/29/2014 UK   3 
>12/29/2014 US   3 
>... 

我想輸出看起來像這樣:

>Date  Canada Europe UK US 
>12/30/2014 1  1  1 1 
>12/29/2014 2  2  3 3 
>... 

我該怎麼辦呢?在此先感謝

回答

0

我會質疑它像

select 
    Date, 
    Sum(case when Calendar = 'Canada' then Days else 0 end) as Canada, 
    Sum(case when Calendar = 'Europe' then Days else 0 end) as Europe, 
    Sum(case when Calendar = 'UK' then Days else 0 end) as UK, 
    Sum(case when Calendar = 'US' then Days else 0 end) as Us, 
    Sum(case when Calendar not in ('Canada','Europe','UK','US') then Days else 0 end) 
    as Other 
from 
    MyTable 
group by 
    Date 
+0

這似乎工作,但我對所有四個區域 – mdecav

+0

得到一個無效的列名我想通了 - 雙引號VS單引號 - 固定 - 謝謝! – mdecav

+0

修正引號和格式。如果它適合你,請選擇解決方案 – automatic

0

你可以做一個PIVOT

SELECT * 
FROM fmCalendar AS T 
PIVOT(SUM([days]) FOR Calendar IN ([Canada],[Europe],[UK],[US])) AS P 

Here is an sqlfiddle與演示。結果是:

╔═══════════════════╦════════╦════════╦════╦════╗ 
║  DATE  ║ CANADA ║ EUROPE ║ UK ║ US ║ 
╠═══════════════════╬════════╬════════╬════╬════╣ 
║ December, 29 2014 ║  2 ║  2 ║ 3 ║ 3 ║ 
║ December, 30 2014 ║  1 ║  1 ║ 1 ║ 1 ║ 
╚═══════════════════╩════════╩════════╩════╩════╝ 
+0

這似乎是一個更簡單(和更容易)的解決方案,但我得到'附近'附近的語法錯誤。不知道爲什麼。 – mdecav

+0

@mdecav那麼,**是奇怪的,因爲在sqlfiddle中使用了相同的查詢,並且不會引發錯誤。你確定你正在使用完全相同的查詢嗎? – Lamak

+0

是;我不知道爲什麼。之前從未使用過PIVOT。 – mdecav