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

SQL點滴之使用with語句來寫一個稍微復雜sql語句

數據庫 SQL Server
偶爾看到sql中也有with關鍵字,好歹也寫了幾年的sql語句,居然第一次接觸,無知啊。看了一位博主的文章,自己添加了一些內容,做了簡單的總結,這個語句還是第一次見到,學習了。我從簡單到復雜地寫,希望高手們不要見笑。

今天偶爾看到sql中也有with關鍵字,好歹也寫了幾年的sql語句,居然***次接觸,無知啊。看了一位博主的文章,自己添加了一些內容,做了簡單的總結,這個語句還是***次見到,學習了。我從簡單到復雜地寫,希望高手們不要見笑。下面的sql語句設計到三個表,表的內容我用txt文件復制進去,這里不妨使用上一個隨筆介紹的建立端到端的package的方法將這些表導入到數據庫中,具體的就不說了。

簡單的聚合

從orders表中選擇各個年份共有共有多少客戶訂購了商品

***種寫法,我們可以寫成這樣

  1. select YEAR(o.orderdate) orderyear,COUNT(distinct(custid)) numCusts  
  2. from Sales.Orders o  
  3. group by YEAR(o.orderdate)  
  4. go 

 要注意的是如果把group by YEAR(o.orderdata)換成group by orderyear就會出錯,這里涉及到sql語句的執行順序問題,有時間再了解一下          

第二種寫法,

  1. select orderyear,COUNT(distinct(custid))numCusts  
  2. from (select YEAR(orderdate) as orderyear,custid from sales.orders) as D  
  3. group by orderyear  
  4. go  

在from語句中先得到orderyear,然后再select語句中就不會出現沒有這個字段的錯誤了

第三種寫法,

  1. select orderyear,COUNT(distinct(custid)) numCusts  
  2. from (select YEAR(orderdate),custid from sales.orders) as D(orderyear,custid)  
  3. group by orderyear  
  4. go  

在as D后面加上選擇出的字段,是不是更加的清楚明了呢!

第四種寫法,with出場了

  1. with c as(  
  2. select YEAR(orderdate) orderyear, custid from sales.orders)  
  3. select orderyear,COUNT(distinct(custid)) numCusts from c group by orderyear  
  4. go  

with可以使語句更加的經湊,下面是權威解釋。  
    
指定臨時命名的結果集,這些結果集稱為公用表表達式 (CTE)。該表達式源自簡單查詢,并且在單條 SELECT、INSERT、UPDATE、MERGE 或 DELETE 語句的執行范圍內定義。該子句也可用在 CREATE VIEW 語句中,作為該語句的 SELECT 定義語句的一部分。公用表表達式可以包括對自身的引用。這種表達式稱為遞歸公用表達式。               
                                                ----MSDN

第五種寫法,也可以借鑒第三種寫法,這樣使語句更加清楚明了,便于維護 

  1. with c(orderyear,custid) as(  
  2.  select YEAR(orderdate),custid from sales.orders)  
  3.  select orderyear,COUNT(distinct(custid)) numCusts from c group by c.orderyear  
  4.  go  


上面5中寫法都得到相同的結果,如下圖1:

 

圖1

添加計算

現在要求要求計算出訂單表中每年比上一年增加的客戶數目,這個稍微復雜 

  1. with yearcount as(  
  2.   select YEAR(orderdate) orderyear,COUNT(distinct(custid)) numCusts from sales.orders group by YEAR(orderdate))  
  3.   select cur.orderyear curyear,cur.numCusts curNumCusts,prv.orderyear prvyear,prv.numCusts prvNumCusts,cur.numCusts-prv.numCusts growth  
  4.   from yearcount cur left join yearcount prv on cur.orderyear=prv.orderyear+1  
  5.  go  

這里兩次使用到with結果集。查詢得到的結果如下圖2

圖2

復雜的計算

查找客戶id,這些客戶和所有來自美國的雇員至少有一筆交易記錄,查詢語句如下

  1. with TheseEmployees as(  
  2. select empid from hr.employees where country='USA'),  
  3. CharacteristicFunctions as(  
  4. select custid,  
  5.        case when custid in (select custid from sales.orders as o where o.empid=e.empid) then 1 else 0 end as charfun  
  6. from sales.customers as c cross join TheseEmployees as e)  
  7. select custid,min(charfun) from CharacteristicFunctions group by custid having min(charfun)=1  
  8. go  

這里嵌套with語句,第with語句查找美國雇員的id,第二個語句使用這個結果和擁有客戶的客戶id和擁有關系標識做笛卡爾積運算。***從這個笛卡爾積中通過標識找到最終的custid。

結果如下圖3

圖3

這里只有簡單地介紹,沒有深入,高手們不要見笑啊。

 

【編輯推薦】

  1. SQL點滴之使用attach功能出現錯誤及解決方法
  2. SQL點滴之一個簡單的字符串分割函數
  3. SQL點滴之重置win7登錄密碼對SQL登錄的影響
  4. SQL點滴之SSIS中的事務處理
責任編輯:艾婧 來源: 博客園
相關推薦

2011-08-02 13:04:40

SQL Server

2011-09-09 10:10:13

SQL數據庫點滴

2011-04-20 11:11:33

SQLSET QUOTED_

2011-04-28 09:49:56

SQLwith子查詢

2011-10-09 16:40:50

T-SQL

2016-09-28 17:34:27

JavaScriptvueWeb

2010-09-06 10:38:25

SQL Server語句

2018-11-05 14:54:18

MySQLSQL語句數據庫

2010-11-11 11:37:22

SQL SELECT語

2010-09-26 10:08:43

sql條件語句

2010-11-09 15:30:01

Sql server時

2010-09-25 11:02:33

SQL主鍵

2010-09-17 16:53:14

SQL中CREATE

2011-06-23 14:00:51

SQL點滴

2010-09-03 13:21:01

SQL刪除

2011-05-11 09:49:32

線程等待SQL Server

2023-03-30 09:10:06

SQLSELECTFROM

2019-10-18 20:22:23

SQL數據庫MySQL

2011-03-31 11:14:51

Sql語句優化

2011-05-19 13:19:38

sql數據刪除
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99中文字幕 | 日韩国产精品一区二区三区 | 久久免费精品 | 中文字幕第九页 | 国产精品观看 | 国产一区在线视频 | 免费在线国产视频 | 国产美女自拍视频 | 91xxx在线观看| 国产精品美女www爽爽爽 | 国产美女一区二区 | 热久久999 | 欧美日韩精品一区二区三区蜜桃 | 欧美激情一区二区 | 日韩av免费在线观看 | 久久久夜色精品亚洲 | 欧美一区二区在线 | 亚洲成人精品国产 | 日本三级网址 | 亚洲高清视频一区 | 欧美视频三级 | 久久久久久av | 国产精品九九视频 | 成人在线中文字幕 | 国产网站在线免费观看 | 一级毛片免费视频观看 | 亚洲精品乱码久久久久久久久 | 久久99深爱久久99精品 | 欧美精三区欧美精三区 | 欧美影院 | 国产一区二区三区视频 | 欧美精品久久久久 | 欧美色综合| 97精品一区二区 | 中文字幕成人在线 | 久久精品久久久久久 | 黄色在线免费观看 | 男女羞羞视频在线看 | 日韩中文字幕一区二区 | 久草在线青青草 | 国产精品高清在线 |