999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

SQL SERVER數據庫縱表轉橫表應用淺析

2010-01-01 00:00:00劉建平

摘要:在管理系統開發中,經常遇到縱表轉橫表或者橫表轉縱表的需求,由于發現各語法都能達到需求,或者有些語法在字段不是很多的時候能達到,但是運行效率相差很多,下面將遇到的各種語法進行總結,希望對同行在有需要的情況下能有所幫助。

關鍵詞:數據庫 sql server 縱表轉橫表

0 引言

模型描述:

將下圖所示的縱表(表1)的數據轉為橫表(表2),在同一報表中同時顯示每個人員的不同月份的銷售金額,年度暫定為2009年。

具體實現:

在系統中,有三個表,字段信息如下

表1:人員、回款、回款日期;

經過分析sql server的應用總結以及對sqlserver幫助潛心專研,感觸頗深,現總結如下與各位朋友共同分享,如有更好或者更方便的建議,請賜教,在此先謝過。本方法適用SQLserver2000及以上。

為了直觀些,表名與字段名稱等信息一律使用漢字名稱。

建表語句如下所示:

CREATE TABLE [dbo].[表1] (

[ID] [int] IDENTITY (1, 1) NOT NULL ,

[人員] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL

[合同金額] [decimal](18, 0) NULL ,

[合同日期] [datetime] NULL

) ON [PRIMARY]

建立一個視圖,如下語句所示:

CREATE VIEW dbo.VIEW1 AS

SELECT 人員, 銷售金額, YEAR(銷售日期) AS 年度, MONTH(銷售日期) AS 月份

FROM dbo.表1

利用下面的語句插入數據

insert into dbo.表1 (人員,銷售金額,銷售日期)

select '張三' ,12,'2009-01-01' union all

select '張三' ,86,'2009-07-09' union all

select '張三' ,89,'2009-08-21' union all

select '張三' ,88,'2009-12-31' union all

select '李四' ,99,'2009-02-21' union all

select '李四' ,36,'2009-03-01' union all

select '李四' ,68,'2009-06-11' union all

select '李四' ,88,'2009-09-21' union all

select '王五' ,89,'2009-03-31' union all

select '王五' ,99,'2009-10-31' union all

select '趙六' ,78,'2009-05-31' union all

select '趙六' ,65,'2009-11-21'

通過下面的視圖將各月份的銷售金額進行匯總:

CREATE VIEW dbo.VIEW2

AS SELECT 人員, 月份, SUM(銷售金額) AS銷售金額

FROM dbo.VIEW1 GROUP BY 人員, 年度, 月份

經過以上準備,各項基本信息齊備,下面將通過VIEW2視圖得到的數據分別說明縱表轉橫表sql語句

1 通過求最大值的方法,此法效率相對較低

SELECT 人員, MAX(a) AS '1',MAX(b) AS '2', MAX(c) AS '3', MAX(d) AS '4', MAX(e) AS '5', MAX(f) AS '6', MAX(g) AS '7', MAX(h) AS '8', MAX(i) AS '9', MAX(j) AS '10', MAX(k) AS '11', MAX(l) AS '12' FROM(

SELECT 人員, CASE 月份 WHEN 1 THEN 銷售金額 END AS 'a'

,CASE 月份 WHEN 2 THEN 銷售金額 END AS 'b'

,CASE 月份 WHEN 3 THEN 銷售金額 END AS 'c'

,CASE 月份 WHEN 4 THEN 銷售金額 END AS 'd'

,CASE 月份 WHEN 5 THEN 銷售金額 END AS 'e'

,CASE 月份 WHEN 6 THEN 銷售金額 END AS 'f'

,CASE 月份 WHEN 7 THEN 銷售金額 END AS 'g'

,CASE 月份 WHEN 8 THEN 銷售金額 END AS 'h'

,CASE 月份 WHEN 9 THEN 銷售金額 END AS 'i'

,CASE 月份 WHEN 10 THEN 銷售金額 END AS 'j'

,CASE 月份 WHEN 11 THEN 銷售金額 END AS 'k'

,CASE 月份 WHEN 12 THEN 銷售金額 END AS 'l'

FROM view2) AS a GROUP BY 人員 order by 人員

結果如下:

2 表鏈接法,此法效率極低,但是也可以得到同樣結果

select distinct(view2.人員),tt1.銷售金額 '1' ,tt2.銷售金額 '2' ,tt3.銷售金額 '3',tt4.銷售金額 '4',tt5.銷售金額 '5',tt6.銷售金額 '6',tt7.銷售金額 '7',tt8.銷售金額 '8',tt9.銷售金額 '9',tt10.銷售金額 '10',tt11.銷售金額 '11',

tt12.銷售金額 '12' from view2

left join (select 人員,銷售金額 from view2 where 月份 = 1) tt1 on tt1.人員=view2.人員

left join (select 人員,銷售金額 from view2 where 月份 = 2) tt2 on tt2.人員=view2.人員

……

left join (select 人員,銷售金額 from view2 where 月份 = 12) tt12 on tt12.人員=view2.人員

結果如1所示。

3 嵌套選擇方法,效率也是較低

select 人員,

\"1\"=(select 銷售金額 from view2 where 月份=1 and 人員=t.人員),

\"2\"=(select 銷售金額 from view2 where 月份=2 and 人員=t.人員),

\"3\"=(select 銷售金額 from view2 where 月份=3 and 人員=t.人員),

……

\"12\"=(select 銷售金額 from view2 where 月份=12 and 人員=t.人員)

from view2 t group by 人員

結果如1所示。

4 分組求和方法,此方法較為合適

select 人員, sum(case when 月份 = 1 then 銷售金額end) '1',

sum(case when 月份 = 2 then 銷售金額end) '2',

……

sum(case when 月份 = 12 then 銷售金額end) '12'

from view2 t group by 人員

結果如1所示。

5 分組求和方法,此方法也較為合適

select 人員,max(case when 月份 = 1 then 銷售金額end) '1'

, max(case when 月份 = 2 then 銷售金額end) '2'

……

, max(case when 月份 = 12 then 銷售金額end) '12'

from view2 t group by 人員

結果如1所示。

應用分析:

本文對縱表轉橫表多數sql語句進行了分析,分別列出了相應的查詢效率。在管理系統中應用較多,如何提高查詢效率,將直接影響到管理系統分析的效果。高效率的查詢,將會極高的提高管理系統的實用性。

參考文獻:

[1]sql server 聯機叢書.

[2]SQL Server 2000從入門到精通.作者Joseph L.Jorden Mike Gunderloy Joseph L.Jorden著.電子工業出版社/2001-03-01.

主站蜘蛛池模板: 亚洲视频在线观看免费视频| 国产99在线| 色婷婷亚洲综合五月| 国产网站免费看| 久久久久久尹人网香蕉| 亚洲中文制服丝袜欧美精品| 精品视频福利| 亚洲成综合人影院在院播放| 国产91无毒不卡在线观看| 在线精品亚洲一区二区古装| 日本高清视频在线www色| 亚洲免费成人网| 色综合中文字幕| 极品av一区二区| 国产丝袜91| 国产精品视频猛进猛出| 国产好痛疼轻点好爽的视频| 国产成人午夜福利免费无码r| 美女无遮挡被啪啪到高潮免费| 在线观看无码av五月花| 亚洲精品麻豆| 欧美日韩国产系列在线观看| 第一页亚洲| 国产美女一级毛片| 永久免费无码日韩视频| 71pao成人国产永久免费视频 | 日本高清在线看免费观看| 三级视频中文字幕| 精品自拍视频在线观看| 日韩精品中文字幕一区三区| 久久青草精品一区二区三区| 国产亚洲精品无码专| 日韩精品成人在线| 青青青视频免费一区二区| 丝袜高跟美脚国产1区| 无码AV高清毛片中国一级毛片| 国产va欧美va在线观看| 六月婷婷激情综合| 91色在线观看| 免费在线播放毛片| 无码专区在线观看| 好吊色妇女免费视频免费| 不卡的在线视频免费观看| 视频二区中文无码| 中文字幕亚洲无线码一区女同| 国产成人综合久久| 亚洲最黄视频| 国产麻豆91网在线看| 99色亚洲国产精品11p| 亚洲侵犯无码网址在线观看| 好紧好深好大乳无码中文字幕| 婷婷亚洲综合五月天在线| 国产爽歪歪免费视频在线观看| 亚洲色无码专线精品观看| 在线国产三级| 91福利免费视频| 少妇被粗大的猛烈进出免费视频| 中文字幕亚洲电影| av一区二区无码在线| 精品国产女同疯狂摩擦2| 亚洲资源站av无码网址| 男女性午夜福利网站| 久久香蕉欧美精品| 亚洲手机在线| 国产色偷丝袜婷婷无码麻豆制服| 91福利片| 91麻豆精品国产高清在线| 欧美成人A视频| 欧美精品一二三区| 任我操在线视频| 狠狠做深爱婷婷久久一区| 在线观看av永久| 99在线观看精品视频| 欧美日韩专区| 久久精品人人做人人爽| 九九九久久国产精品| 中文字幕调教一区二区视频| 91视频99| 97成人在线观看| …亚洲 欧洲 另类 春色| 亚洲天堂日本| 亚洲AV电影不卡在线观看|