成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL行轉列應用的動態實現方式

數據庫 SQL Server
SQL行轉列的需求,在項目中還是經常可見的,尤其報表類的應用,更是非常廣泛!上期我們講了SQL行轉列的靜態實現方式,本期搞一下行轉列的動態實現方案,解決方案并不唯一,這里采用存儲過程的實現方式!

概述:

SQL行轉列的需求,在項目中還是經常可見的,尤其報表類的應用,更是非常廣泛!上期我們講了SQL行轉列的靜態實現方式,本期搞一下行轉列的動態實現方案,解決方案并不唯一,這里采用存儲過程的實現方式!

 

[[440882]]

 

接下來我們詳細講解下SQL動態行轉列的實現步驟:

創建模擬數據:

這里還是老套路,IT編程人入門的經典學生選課表系列,學生表、課程表、成績表!就拿這套耳熟能詳的表結構進行講解!

 

SQL行轉列應用的動態實現方式

 

 

SQL行轉列應用的動態實現方式

 

插入模擬的數據,用于動態行轉案例的使用!

 

SQL行轉列應用的動態實現方式

 

先寫好靜態行轉列SQL:

這一步相對還是比較重要,畢竟我們要在一個靜態的行轉列基礎之上,構建動態的行轉列應用,課程數據會有動態變化,學生也會選擇新開的課程,這樣靜態模式勢必不會有效,但參照靜態模板,去開發動態的模式,則更加有參照性!

 

  1. SELECT S.SID,S.sname,  
  2. MAX(case c.cname when '數學' then sc.score else 0 endas 數學, 
  3. MAX(case c.cname when '語文' then sc.score else 0 endas 語文, 
  4. MAX(case c.cname when '英語' then sc.score else 0 endas 英語 
  5. FROM Student as S 
  6. LEFT JOIN SC AS SC ON S.sid = SC.SID 
  7. LEFT JOIN Course AS C ON C.cid = SC.CID 
  8. GROUP BY S.sid,S.sname 

 

 

SQL行轉列應用的動態實現方式

 

通過測試,數據效果沒有問題,正是我們期待的樣子!

編寫動態腳本:

動態行轉列無疑需要使用SQL編程的技術,動態的遞歸課程名稱,這樣才可以一勞永逸的解決問題!

先編寫動態的SQL腳本:

 

  1. DECLARE @SQL VARCHAR(MAX
  2.  
  3. SELECT @SQL = ' SELECT S.SID,S.SNAME ' 
  4. SELECT @SQL = @SQL + ' , ISNULL(MAX(CASE c.cname WHEN '''+cname+''' THEN sc.score END ),0) AS '''+c.cname+''' '  
  5. FROM Course  AS C 
  6.  
  7. print @sql 
  8.  
  9. SELECT @SQL = @SQL + ' FROM Student as S 
  10. LEFT JOIN SC AS SC ON S.sid = SC.SID 
  11. LEFT JOIN Course AS C ON C.cid = SC.CID  
  12. GROUP BY S.sid,S.sname' 
  13.  
  14. print @sql 
  15.  
  16. EXEC (@SQL) 

 

測試結果與靜態SQL完全一致,看來問題已經解決,接下來就是優化的問題了!

 

 

將上述的動態腳本封裝成存儲過程,第一可以盡量地提升查詢效率,第二方便代碼段的調用!

 

  1. CREATE PROC StudentScore_Proc 
  2. AS 
  3. BEGIN 
  4.  
  5.  
  6. DECLARE @SQL NVARCHAR(MAX
  7.  
  8. SELECT @SQL = N' SELECT S.SID,S.SNAME ' 
  9. SELECT @SQL = @SQL + N' , ISNULL(MAX(CASE c.cname WHEN '''+cname+''' THEN sc.score END ),0) AS '''+c.cname+''' '  
  10. FROM Course  AS C 
  11.  
  12.  
  13. SELECT @SQL = @SQL + N' FROM Student as S 
  14. LEFT JOIN SC AS SC ON S.sid = SC.SID 
  15. LEFT JOIN Course AS C ON C.cid = SC.CID  
  16. GROUP BY S.sid,S.sname' 
  17.  
  18. print @sql 
  19.  
  20. EXECUTE sp_executesql 
  21. @STMT = @SQL 
  22.  
  23. END 
  24.  
  25. EXEC dbo.StudentScore_Proc 

 

封裝完存儲過程,我們再執行一下,看看結果!果然沒有任何問題,與預期完全一致!

 

 

這時候我們更改一下數據,課程表中新增物理、化學兩門課程,諾克薩斯之手分別選擇了兩門課程,蓋倫僅僅選擇了化學,武器大師逃學,倆門課都沒有選擇。

 

  1. INSERT INTO Course SELECT 4,'物理' 
  2. INSERT INTO Course SELECT 5,'化學' 
  3.  
  4. INSERT INTO SC SELECT 1,4,99 
  5. INSERT INTO SC SELECT 1,5,88 
  6. INSERT INTO SC SELECT 2,5,77 
  7.  
  8. EXEC dbo.StudentScore_Proc 

 

數據改變之后,我們繼續測試一下,再次執行我們編寫好的存儲過程,結果非常完美,隨著數據的變化,查詢的結果集也是對應的變化,非常NICE,大功告成了!

 

 

總結一下:

 

連續倆篇的文章更新,SQL行轉列在項目中的應用都已經涵蓋了。即將步入年底了,肯定有很多小伙伴被客戶、領導追著搞各種報表,希望對小伙伴們有些許的幫助。

 

責任編輯:華軒 來源: 今日頭條
相關推薦

2024-10-16 21:17:59

2021-11-08 23:08:06

SQL Serve數據庫開發

2021-06-23 10:13:00

SQL行轉列列轉行

2014-07-10 10:09:11

JSON數據行轉列

2021-10-14 06:51:55

數據庫SQL

2010-07-28 09:09:55

SQL

2025-04-03 08:00:51

2010-11-03 14:28:15

DB2行轉列

2010-07-13 16:07:26

SQL Server行

2010-07-13 16:20:30

SQL Server數

2010-11-12 13:08:36

動態sql語句

2024-02-04 09:24:45

MyBatisSQL語句Spring

2010-02-03 10:11:17

C++動態數組

2011-04-07 14:04:28

SQL動態交叉表

2009-09-14 13:17:51

LINQ to SQLLINQ to SQL

2021-02-06 14:27:00

SQL優化運維

2012-05-24 09:18:34

ibmdw

2010-11-12 11:48:15

2010-07-22 09:01:02

SQL Server鏡

2023-01-09 18:15:21

數組Python類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩视频观看 | 亚洲成av人影片在线观看 | 久久久久无码国产精品一区 | 91免费观看| 国产成人小视频 | 91久久精品国产免费一区 | 精久久久 | 免费观看av网站 | hdfreexxxx中国妞 | 99精品视频在线 | 国产黄色在线观看 | 婷婷色在线 | 亚洲视频区 | 成人片在线看 | 美女二区 | 国产精品视频导航 | 久久成人国产精品 | 91九色在线观看 | 欧美理伦片在线播放 | 免费观看成人鲁鲁鲁鲁鲁视频 | 特黄视频| 中文字幕在线观看第一页 | 黄网站免费在线观看 | 青草视频在线 | 国产99久久精品 | 精品伊人久久 | 欧美精品一区二区蜜桃 | h小视频 | 国产av毛片 | www.中文字幕 | 国产精品国产亚洲精品看不卡15 | 国产在线观看一区 | 国产男人的天堂 | 国产欧美精品一区二区色综合 | 色资源在线视频 | 亚洲一区二区久久久 | 亚洲精品自拍 | 精品欧美一区二区精品久久久 | 欧美一级在线免费观看 | 欧美最猛黑人 | 国产精品一码二码三码在线 |