報表顯示需求,查詢結果往往需要做一些行列轉換或列行轉換來顯示。
就以這個例子的資料來源做演示。
正常查詢結果顯示和執行結果,如下:
下面演示,把[rid]和[dt]作為列顯示:
view code
select
[rid],
sum(
case
when[dt
]='2011-01-23
'then
[hits
]end
) as
'2011-01-23',
sum(
case
when[dt
]='2011-01-24
'then
[hits
]end
) as
'2011-01-24',
sum(
case
when[dt
]='2011-01-25
'then
[hits
]end
) as
'2011-01-25',
sum(
case
when[dt
]='2011-01-26
'then
[hits
]end
) as
'2011-01-26
'from
[dbo].
[recordhits
]groupby[
rid]
執行結果:
下面把dt,記錄[rid]作為列顯示:
view code
select[dt
],sum(
case
when
[rid]=
'r1'then
[hits
]end
) as'r1
',sum(
case
when
[rid]=
'r2'then
[hits
]end
) as'r2
',sum(
case
when
[rid]=
'r3'then
[hits
]end
) as'r3
',sum(
case
when
[rid]=
'r4'then
[hits
]end
) as'r4
'from
[dbo].
[recordhits
]groupby[
dt]執行顯示結果:
SQL Server行列轉換
行列轉換應該非常廣泛,也就是常說的交叉表,範例如下 注意事項 資料庫相容性級別 sql server 2005 90 建立臨時測試表 create table test 姓名 varchar 10 課程 varchar 10 分數 int insert into test values 張三 語文 ...
SQL Server 行列轉換 2
參考前乙個例子現想使用另外一種方式來處理行列轉換,實現下面效果 產生唯一字段,稍後為迴圈使用 rid nvarchar 2 dt date,hits int 把需要處理的資料記錄預存入這個臨時表中 insert into dbo t select rid dt hits from dbo recor...
SQL Server 行列轉換 1
參考前乙個sql的行列轉換例子 覺得不夠自由,需要去預先知道記錄的內容去定義行或列。下面這個方法,是insus.net常用一種處理方案,為資料量較少而準備。比較長,基本上寫有說明,理解起來,一般不會有多大困難。如下 view code 由於原記錄表沒有乙個唯一主鍵,只好新建乙個臨時表,把需要處理的記...