自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

幾個(gè)SQL查詢(xún)小技巧,你會(huì)嗎?

運(yùn)維 數(shù)據(jù)庫(kù)運(yùn)維
sql是一個(gè)大家都比較關(guān)注的熱門(mén)話(huà)題,無(wú)論你在面試,還是工作中,都很有可能會(huì)遇到。以下的小技巧能幫助大家!

 [[437309]]

本文轉(zhuǎn)載自微信公眾號(hào)「SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)」,作者丶平凡世界。轉(zhuǎn)載本文請(qǐng)聯(lián)系SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)公眾號(hào)。

行列轉(zhuǎn)換

問(wèn)題:假設(shè)有張學(xué)生成績(jī)表(tb)如下:

想變成(得到如下結(jié)果):

代碼:

  1. WITH tb(姓名,課程,分?jǐn)?shù)) AS 
  2. SELECT N'張三',N'語(yǔ)文',74 
  3. UNION ALL 
  4. SELECT N'張三',N'數(shù)學(xué)',83 
  5. UNION ALL 
  6. SELECT N'張三',N'物理',93 
  7. UNION ALL 
  8. SELECT N'李四',N'語(yǔ)文',79 
  9. UNION ALL 
  10. SELECT N'李四',N'數(shù)學(xué)',86 
  11. UNION ALL 
  12. SELECT N'李四',N'物理',88 
  13.  
  14. SELECT 姓名 , 
  15. MAX(CASE 課程 WHEN '語(yǔ)文' THEN 分?jǐn)?shù) ELSE 0 END) 語(yǔ)文, 
  16. MAX(CASE 課程 WHEN '數(shù)學(xué)' THEN 分?jǐn)?shù) ELSE 0 END) 數(shù)學(xué), 
  17. MAX(CASE 課程 WHEN '物理' THEN 分?jǐn)?shù) ELSE 0 END) 物理 
  18. FROM tb GROUP BY  姓名 

分頁(yè)

方案一:利用NOT IN和SELECT TOP分頁(yè)語(yǔ)句形式

  1. SELECT TOP 10 * FROM TestTable 
  2. WHERE ID NOT IN 
  3. (SELECT TOP 20 ID FROM TestTable ORDER BY ID) 
  4. ORDER BY ID 

方案二:利用ID大于多少和SELECT TOP分頁(yè)語(yǔ)句形式

  1. SELECT TOP 10 * FROM TestTable 
  2. WHERE ID > ( 
  3. SELECT MAX(id) FROM  
  4. (SELECT TOP 20 id FROM  
  5. TestTable ORDER BY id) AS T) 
  6. ORDER BY ID 

方案三:利用SQL Server中的特性ROW_NUMBER進(jìn)行分頁(yè)

  1. SELECT * FROM ( 
  2.   SELECT ROW_NUMBER() OVER(ORDER BY ID DESCAS ROWID,* 
  3.   FROM TestTable 
  4. AS mytable where ROWID between 21 and 40 

結(jié)果合并

合并重復(fù)行

  1. SELECT * FROM A 
  2.  
  3. UNION 
  4.  
  5. SELECT * FROM B 

不合并重復(fù)行

  1. SELECT * FROM A 
  2. UNION ALL 
  3. SELECT * FROM B 

隨機(jī)排序

  1. SELECT * FROM TestTable ORDER BY NEWID() 

還可以結(jié)合TOP取隨機(jī)的前N條記錄

  1. SELECT TOP 100 * FROM TestTable ORDER BY NEWID() 

以任意符號(hào)分隔取兩邊數(shù)據(jù)

例如我們以逗號(hào)(,)來(lái)分割數(shù)據(jù),將如下數(shù)據(jù)

分割成如下圖所示:

  1. SELECT R, 
  2. CASE WHEN  CHARINDEX(',',R)>1 THEN  LEFT(R,CHARINDEX(',',R)-1) ELSE NULL END AS R1 , 
  3. CASE WHEN CHARINDEX(',',R)>1 THEN RIGHT(R,(LEN(R) - CHARINDEX(',',R))) ELSE NULL END AS R2 
  4. FROM  t 

代碼較長(zhǎng),我們對(duì)代碼進(jìn)行拆分來(lái)理解:

  1. SELECT  CHARINDEX(',',','--結(jié)果是1 
  2. SELECT  CHARINDEX(',','NULL'--結(jié)果是0 
  3. SELECT  CHARINDEX(',',''--結(jié)果是0 
  4. SELECT  CHARINDEX(',','A,B'--結(jié)果是2 
  5. SELECT  LEN('A,B'--結(jié)果是3 
  6. SELECT  LEN('A,B') - CHARINDEX(',','A,B'--結(jié)果是3-2=1 
  7. SELECT  RIGHT('A,B',( LEN('A,B') - CHARINDEX(',','A,B'))) --結(jié)果是 B 

最后一步我們將'A,B'拆分出來(lái)了B,同理A我們也可以用類(lèi)似的方法獲取到。

WAITFOR延時(shí)執(zhí)行

例 等待1 小時(shí)2 分零3 秒后才執(zhí)行SELECT 語(yǔ)句

  1. WAITFOR DELAY '01:02:03' 
  2.  
  3. SELECT * FROM Employee 

其中 DELAY是在延時(shí)多長(zhǎng)時(shí)間后才開(kāi)始執(zhí)行。

例 等到晚上11 點(diǎn)零8 分后才執(zhí)行SELECT 語(yǔ)句

  1. WAITFOR TIME '23:08:00' 
  2. SELECT * FROM Employee 

其中TIME是等到具體某個(gè)時(shí)刻才開(kāi)始執(zhí)行

 

責(zé)任編輯:武曉燕 來(lái)源: SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)
相關(guān)推薦

2022-11-16 09:04:36

SQL查詢(xún)SELECT

2022-09-06 08:07:24

SQL語(yǔ)句查詢(xún)

2022-04-06 07:32:41

Java運(yùn)算符變量

2022-03-15 08:36:46

遞歸查詢(xún)SQL

2021-02-03 10:46:31

SQL數(shù)據(jù)庫(kù)技巧

2011-01-19 09:07:20

Thunderbird

2024-11-15 10:45:56

2015-02-04 10:32:57

Objective-CSwift

2022-08-18 10:01:35

Jmeter技巧

2020-11-03 14:56:09

手機(jī)安全信息泄露漏洞

2019-04-15 13:24:31

2021-02-05 16:20:54

代碼Linux技巧

2009-06-17 15:38:57

java軟件安裝

2009-06-18 11:12:42

Hibernate S優(yōu)化

2021-03-12 10:12:09

etState函數(shù)React

2020-02-23 23:29:07

Python編程開(kāi)發(fā)

2022-06-07 23:28:05

線(xiàn)程安全后端

2011-06-13 17:36:43

外鏈

2023-09-25 13:15:50

SQL數(shù)據(jù)庫(kù)

2023-04-12 08:18:40

ChatGLM避坑微調(diào)模型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)