交叉表
先看看交叉表什么樣子:
“交叉表”對象是一個網(wǎng)格,用來根據(jù)指定的條件返回值。數(shù)據(jù)顯示在壓縮行和列中。這種格式易于比較數(shù)據(jù)并辨別其趨勢。它由三個元素組成:
行 列 摘要字段
- “交叉表”中的行沿水平方向延伸(從一側(cè)到另一側(cè))。在上面的示例中,“手套”(Gloves) 是一行。
- “交叉表”中的列沿垂直方向延伸(上下)。在上面的示例中,“美國”(USA) 是一列。
- 匯總字段位于行和列的交叉處。每個交叉處的值代表對既滿足行條件又滿足列條件的記錄的匯總(求和、計數(shù)等)。在上面的示例中,“手套”和“美國”交叉處的值是四,這是在美國銷售的手套的數(shù)量。
下面實現(xiàn)一個例子:
有一個表:??
BH????????????GZLB??????????JE??
----------------------??
001????????????A??????????????100??
001????????????B??????????????150??
001????????????C??????????????110??
002????????????A??????????????99??
002????????????B??????????????180??
002????????????C??????????????150??
003????????????A??????????????160??
003????????????B??????????????170??
003????????????C??????????????130??
用SQL語句如何將上面的表變成下面橫向的排列方式呢。??
BH????????A??????B??????C??
-------------------??
001????100????150??110??
002????99??????180??150??
003????160????170??130????????
(GZLB??里面的字段是動態(tài)的,不是只有A,B,C??可能還有A,B,C,D,E...)??
準備數(shù)據(jù):
if??exists(select??name??from??sysobjects??where??name='tblA'??and??xtype='U')??
?????drop??table??tblA??
?
create??table??tblA(??
???BH??char(3)??not??null,??
???GZLB??varchar(3)??not??null,??
???JE??int??not??null??
)??
go??
?
insert??tblA??values('001',????????????'A',??????????????100)??
insert??tblA??values('001',????????????'B',??????????????150)??
insert??tblA??values('001',????????????'C',??????????????110)??
insert??tblA??values('002',????????????'A',??????????????99)??
insert??tblA??values('002',????????????'B',??????????????180)??
insert??tblA??values('002',????????????'C',??????????????150)??
insert??tblA??values('003',????????????'A',??????????????160)??
insert??tblA??values('003',????????????'B',??????????????170)??
insert??tblA??values('003',????????????'C',??????????????130)??
查詢sql語句如下:?
select?max(case?GZLB?when?'A'?then?JE?else?null?end) as?'A',
?????? ?max(case?GZLB?when?'B'?then?JE?else?null?end)?as?'B',
?????? ?max(case?GZLB?when?'C'?then?JE?else?null?end)?as?'C'?from?tblA?group?by?BH // 每個case只能得到一個數(shù)據(jù),所以用max聚合函數(shù)的目的是對了配合后面的group by ,否則會出錯(GZLB, JE不在group by 或者聚合函數(shù)中的錯誤)
當然這樣還沒有進行相關的統(tǒng)計只是把表行變列了,下會分解吧
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/gaiyang/archive/2011/04/12/2013930.html
總結(jié)
- 上一篇: php设置内存
- 下一篇: perl学习4--调用子程序