交叉表
先看看交叉表什么樣子:
“交叉表”對象是一個網格,用來根據指定的條件返回值。數據顯示在壓縮行和列中。這種格式易于比較數據并辨別其趨勢。它由三個元素組成:
行 列 摘要字段
- “交叉表”中的行沿水平方向延伸(從一側到另一側)。在上面的示例中,“手套”(Gloves) 是一行。
- “交叉表”中的列沿垂直方向延伸(上下)。在上面的示例中,“美國”(USA) 是一列。
- 匯總字段位于行和列的交叉處。每個交叉處的值代表對既滿足行條件又滿足列條件的記錄的匯總(求和、計數等)。在上面的示例中,“手套”和“美國”交叉處的值是四,這是在美國銷售的手套的數量。
下面實現一個例子:
有一個表:??
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??里面的字段是動態的,不是只有A,B,C??可能還有A,B,C,D,E...)??
準備數據:
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只能得到一個數據,所以用max聚合函數的目的是對了配合后面的group by ,否則會出錯(GZLB, JE不在group by 或者聚合函數中的錯誤)
當然這樣還沒有進行相關的統計只是把表行變列了,下會分解吧
?
?
轉載于:https://www.cnblogs.com/gaiyang/archive/2011/04/12/2013930.html
總結
- 上一篇: php设置内存
- 下一篇: ASP.NET服务器应用程序不可用