1. 程式人生 > >關於SQL 的with as 迴圈用法

關於SQL 的with as 迴圈用法

WITH AS短語也叫做子查詢部分(subquery factoring),是用來定義一個SQL片斷,該SQL片斷會被整個SQL語句所用到。這個語句算是公用表表達式(CTE),對於with 的迴圈 sql 2008有限制,最大隻能遞迴 100 次,下面來測試看看。

如我想生成1到200行的資料

程式碼:with t as (
select 1 as id 
union all
select t.id+1 from t where t.id<200)
 select * from t   

執行時報錯:,對於CTE的限制需要利用recursion 函式解除限制,

with t as (
select 1 as id 
union all
select t.id+1 from t where t.id<200)
 select * from t 

option (maxrecursion 0)   這樣執行就沒有問題,0是代表無限大,也可以改1000,或者2000 指定的數值,前提是要大於你遞迴的次數,不然還是報錯。再來說說利用with 自定義值去迴圈指定值,下面拿做的一個SSRS 報表進行演示,excel效果圖如下,現在要作成SSRS 報表。

第一:將出勤人員的姓名與(出勤、上班、下班)做迴圈,再取出刷卡時間。

with x as  ------------定義迴圈值
(select * from (values(N'出勤'),
                                      (N'上班'),
                                      (N'下班'))as a (type1)),
    y as (select distinct a.userid,b.name,b.BADGENUMBER
                 from 出勤table a 
                 inner join usertable  b on a.USERID = b.USERID,

z as (select * from x,y)

select * from z   結果


可以看到出勤、上班、下班 三個值已經跟每個user進行了迴圈,

    第二 :再自定義指定某年的某月存在的日期天數

程式碼如:date1 as

 (select convert(varchar(10),dateadd(DAY,t2.number,t1.day),120) day from 
(select @date1+'-'[email protected]+'-01' day) t1, 
(select number from MASTER..spt_values WHERE TYPE='P' AND number>=0 and number<=31) t2 
 where convert(varchar(10),dateadd(DAY,t2.number,t1.day),120) like @date1+'-'

[email protected]+'%' 
    )[email protected] 為指定的年份、@date2 為指定的月份,當然需要在前面定義變數值,這裡就省略了,

第三:再將打卡時間進行排名,在http://blog.csdn.net/qyx0714/article/details/72683408 這裡介紹按打卡時間排名取打卡資料的介紹,最終整理SSRS 圖如下:


相關推薦

關於SQLwith as 迴圈用法

WITH AS短語也叫做子查詢部分(subquery factoring),是用來定義一個SQL片斷,該SQL片斷會被整個SQL語句所用到。這個語句算是公用表表達式(CTE),對於with 的迴圈 sql 2008有限制,最大隻能遞迴 100 次,下面來測試看看。 如我想生

SQLWITH--AS用法

一.WITH AS的含義 WITH AS短語,也叫做子查詢部分(subquery factoring),可以定義一個SQL片斷,該SQL片斷會被整個SQL語句用到。可以使SQL語句的可讀性更高,也可以在UNION ALL的不同部分,作為提供資料的部分。 對於UNION ALL,使用WIT

python with as用法

關系 eth return int 簡潔 機制 self clas blog 以下為轉載https://www.cnblogs.com/DswCnblog/p/6126588.html with。。as。。一個使用場景是文件處理,你需要獲取一個文件句柄,從文件中讀取數據,然

python with as用法

final clas 上下文 執行 try __exit__ tmp bsp data with語句: 事後做清理工作。比如文件處理,需要獲取一個文件句柄,從文件中讀取數據,然後關閉文件句柄 不用with語句,代碼如下: file = open("/tmp/foo.txt

python中with...as用法

with…as,就是個python控制流語句,像 if ,while一樣。 with…as語句是簡化版的try except finally語句。 那我們先理解一下try…except…finally語句是幹啥的。實際上,try…except語句和try…finally語句是兩種語句,用

Python的with...as用法

這個語法是用來代替傳統的try...finally語法的。  with EXPRESSION [ as VARIABLE] WITH-BLOCK  基本思想是with所求值的物件必須有一個__enter__()方法,一個__exit__()方法。 file = ope

sql with as 遞迴的實現(樹形結構)

WITH AS短語,也叫做子查詢部分(subquery factoring),定義一個sql 片段,改sql 片段會被整個sql語句用到。其中最實用的功能就是資料的遞迴,遞迴的原理:遞迴包括至少兩個查詢,一個查詢作為遞迴的基點也就是起點,另一個查詢作為遞迴的成員。   一、定義一個

python中with as用法

With語句是什麼? 有一些任務,可能事先需要設定,事後做清理工作。對於這種場景,Python的with語句提供了一種非常方便的處理方式。一個很好的例子是檔案處理,你需要獲取一個檔案控制代碼,從檔案中讀取資料,然後關閉檔案控制代碼。 如果不用with語句,程式碼如下: file =

python中 with-as 語句用法

With語句是什麼? 有一些任務,可能事先需要設定,事後做清理工作。對於這種場景,Python的with語句提供了一種非常方便的處理方式。一個很好的例子是檔案處理,你需要獲取一個檔案控制代碼,從檔案中讀取資料,然後關閉檔案控制代碼。 如果不用with語句,程式碼如下: file = open

關於Oracle中的aswith as用法

在Oracle中as關鍵字不能用於指定表的別名,在Oracle中指定表的別名時只需在原有表名和表的別名之間用空格分隔即可, 但可以用於指定列的別名,但在儲存過程中如果列的別名與原有列名相同,在執行時會報錯(編譯時不會出錯),其他情況下 列的別名可以與列名本身相同。 在查詢oracle中as關鍵字的用

ORACLE 中 WITH AS用法

下面是摘抄並整合的部分。 一.WHAT:     WITH AS短語,也叫做子查詢部分(subquery factoring,可以用來定義一個SQL片斷,該SQL片斷會被整個SQL語句所用,也可以提高sql語句的可讀性, 也有可能是在UNION ALL的不同部分,作為提供

oracle中with as用法

select * from emp;select * from empinfo;truncate table empinfoinsert into empinfo(empno,ename,job,mgr

Python中的with...as用法

這個語法是用來代替傳統的try...finally語法的。  with EXPRESSION [ as VARIABLE] WITH-BLOCK  基本思想是with所求值的物件必須有一個__enter__()方法,一個__exit__()方法。 緊跟with後面的

sql,with as ,in的配合使用

WITH AS的含義 1.WITH AS短語,也叫做子查詢部分(subquery factoring),可以讓你做很多事情,定義一個SQL片斷,該SQL片斷會被整個SQL語句所用到。有

T-SQL with關鍵字 with as 遞迴迴圈

Select字句在邏輯上是SQL語句最後進行處理的最後一步,所以,以下查詢會發生錯誤: SELECT YEAR(OrderDate) AS OrderYear, COUNT(DISTINCT CustomerID) AS NumCusts FROM dbo.Orde

SQL中使用WITH AS提高性能-使用公用表表達式(CTE)簡化嵌套SQL

column 簡化 expr tor .com 獲取 另一個 rom 指定 一.WITH AS的含義 WITH AS短語,也叫做子查詢部分(subquery factoring),可以讓你做很多事情,定義一個SQL片斷,該SQL片斷會被整個SQL語句所用到。有的時候

公用表達式 CTE with as 用法總結

efi 用法 sta 使用方法 屬於 actor 這就是 oge union 出處: http://wudataoge.blog.163.com/blog/static/80073886200961652022389/ 一.WITH AS的含義 WITH AS短語,

SQL 語句遞歸查詢 With AS 查找所有子節點

商務部 ins AR where reat parent ren nvarchar tab create table #EnterPrise( Department nvarchar(50),--部門名稱 ParentDept nvarchar(50),-

Oracle中with as用法

分組 關鍵字 視圖 group 高效 這也 過程 avi 臨時 with as 相當於虛擬視圖。 例子:需求描述 按照x列分組後統計y列的總值,最終目標是選出比y列總值的三分之一大的那些分組統計信息 使用子查詢方式實現最容易想到的方法 SELECT x, SUM (y)

ORACLE WITH AS 用法,創建臨時表

進一步 有用 cin AI 運行 結構 nbsp index ring 語法: with tempName as (select ....)select ... –針對一個別名with tmp as (select * from tb_name) –針對多個別名wi