Re: [SQL ]如何產生列聯表

作者: vity (逍遙盃-佛得)   2015-03-06 01:19:56
※ 引述《squallscer (羽毛)》之銘言:
: 資料庫名稱: SQL server 2008
: 資料庫版本:R2
: 內容/問題描述:
: 假設有三個欄位:
: id col1 col2
: 1 A B
: 2 B A
: 3 C C
: 4 A A
: 5 B C
: . . .
: . . .
: 希望產生一個列聯表為:
: A B C
: A 1 1 0
: B 1 0 1
: C 0 0 1
: 在google中搜尋contingency table都沒有找到答案
: 故來版上詢問前輩該怎麼寫呢?
列連表是統計的東西
資料庫把它叫做OLAP
SQL:1999就有開始OLAP
可以用 group by rollup 或 group by cube
資料仍然是以資料表的方式呈現
例如
select semester as date, country, sum(sales)
from sales
group by cube(semester,country)
會給下面的表
Date Country Sales
1st semester Ireland 20
1st semester France 126
1st semester Germany 56
1st semester null 202
2nd semester Ireland 23
2nd semester France 138
2nd semester Germany 48
2nd semester null 209
null Ireland 43
null France 264
null Germany 104
null null 411
group by cube其實跟下面的查詢是一樣的
select semester as date, country, sum(sales)
from sales group by semester, country
UNION select null as date, country, sum(sales)
from sales group by country
UNION select semester as date, null as country,
sum(sales) from sales group by country
UNION select null as date, null as country,
sum(sales) from sales
它的結果仍然不是pivot table, 這跟資料庫結構有關
很需要一個pivot table的話
比較方便的是建一個cube
你可以用Analysis service建
再用MDX查詢
就會給你一模一樣的pivot table

Links booklink

Contact Us: admin [ a t ] ucptt.com