sqlserverwithcte
⑴ sqlserver 日期表的問題。
DECLARE@yVARCHAR(4),@mVARCHAR(2)
declare@sdateDATETIME
SET@y='2013'
SET@m='11'
set@sdate=@y+'-'+@m+'-01'
SELECT@sdate
selectDATEADD(dd,number,@sdate)asdate
frommaster..spt_valueswheretype='P'
andDATEADD(dd,number,@sdate)<DATEADD(mm,1,@sdate)
結果:
2013-11-0100:00:00.000
2013-11-0200:00:00.000
2013-11-0300:00:00.000
2013-11-0400:00:00.000
2013-11-0500:00:00.000
2013-11-0600:00:00.000
2013-11-0700:00:00.000
2013-11-0800:00:00.000
2013-11-0900:00:00.000
2013-11-1000:00:00.000
2013-11-1100:00:00.000
2013-11-1200:00:00.000
2013-11-1300:00:00.000
2013-11-1400:00:00.000
2013-11-1500:00:00.000
2013-11-1600:00:00.000
2013-11-1700:00:00.000
2013-11-1800:00:00.000
2013-11-1900:00:00.000
2013-11-2000:00:00.000
2013-11-2100:00:00.000
2013-11-2200:00:00.000
2013-11-2300:00:00.000
2013-11-2400:00:00.000
2013-11-2500:00:00.000
2013-11-2600:00:00.000
2013-11-2700:00:00.000
2013-11-2800:00:00.000
2013-11-2900:00:00.000
2013-11-3000:00:00.000
⑵ sqlserver數據 拆分問題
SELECT*FROM表
EXCEPT
SELECTTOP500000*FROM表
⑶ sqlserver問題。求思路
select t1.uid,datediff(dd,t1.adate,t2.adate) from
(select * from test a where (select count(*) from test b where a.uid=b.uid and b.adate<a.adate) between 1 and 2) t1,
(select * from test a where (select count(*) from test b where a.uid=b.uid and b.adate<a.adate) between 1 and 2) t2
where t1.uid=t2.uid and t2.adate>t1.adate
表名test,自己換一下
⑷ sqlserver 單表 分組 不同查詢條件 統計 數據 。
select 姓名,
1 類型1,
sum(isnull(case when 類型=1 then 1 else 0 end,0)) 類型1的個數,
2 類型2,
sum(isnull(case when 類型=2 then 1 else 0 end,0)) 類型2的個數
from 表名
group by 姓名
⑸ sqlserver with 語法
一.sqlserver with as的含義
WITH AS短語,也叫做子查詢部分(subquery factoring),可以讓你做很多事情,定義一個SQL片斷,該SQL片斷會被整個SQL語句所用到。有的時候,是為了讓SQL語句的可讀性更高些,也有可能是在UNION ALL的不同部分,作為提供數據的部分。
特別對於UNION ALL比較有用。因為UNION ALL的每個部分可能相同,但是如果每個部分都去執行一遍的話,則成本太高,所以可以使用WITH AS短語,則只要執行一遍即可。如果WITH AS短語所定義的表名被調用兩次以上,則優化器會自動將WITH AS短語所獲取的數據放入一個TEMP表裡,如果只是被調用一次,則不會。而提示materialize則是強制將WITH AS短語里的數據放入一個全局臨時表裡。很多查詢通過這種方法都可以提高速度。
二.使用方法
先看下面一個嵌套的查詢語句:
select * from person.StateProvince where CountryRegionCode in
(select CountryRegionCode from person.CountryRegion where Name like 'C%')
declare @t table(CountryRegionCode nvarchar(3))
insert into @t(CountryRegionCode) (select CountryRegionCode from person.CountryRegion where Name like 'C%')
select * from person.StateProvince where CountryRegionCode
in (select * from @t)
⑹ sqlserver 獲得表中的第2條數據
select top 1 * from table
where id not in (select top 1 ID from table order by id)
order by id
⑺ 模糊匹配SQL語句寫法 SQLSERVER
declare @str varchar(max)='6688 sasaaaa wty',@sql varchar(max)
set @sql='select * from mingTest where 1=0 '
;with cte as(select name=SUBSTRING(A.[str],number,CHARINDEX(' ',A.[str]+' ',number)-number) from A JOIN master..spt_values ON type='p' and number between 1 and LEN(@str)
WHERE CHARINDEX(' ',' '+A.[str],number)=number)
select @sql=@sql+'or [str] like ''%'+name+'%''' from cte where name<>''
EXEC @sql
⑻ sql server with cte as 的問題
with是CTE的語法。SQLServer2005以上版本(含SQL2005)支持。SQL2000與以下的版本,是不支持的。
⑼ sqlserver 遞歸查詢
CREATE TABLE #tb1(stuId INT,stuName VARCHAR(30),teaId INT);
INSERT INTO #tb1 (stuId,stuName,teaId)
VALUES(1,'zhou',0),(2,'kong',0),(3,'hong',2),(4,'zhang',1),(5,'liu',4),
(6,'zhao',5),(7,'zheng',6),(8,'wei',7)
;WITH cte AS (
SELECT t.stuId,t.stuName,t.teaId FROM #tb1 AS t
WHERE t.stuId=8
UNION ALL
SELECT t.stuId,t.stuName,t.teaId FROM cte AS c
JOIN #tb1 AS t ON c.teaId=t.stuId
)
SELECT * FROM cte