-- SELECT * FROM dbo.split('581:579:519:279:406:361:560',':') CREATE FUNCTION [dbo].[Split] (@Sql VARCHAR (8000), @Splits VARCHAR (10)) RETURNS @temp TABLE (a VARCHAR (100)) AS BEGIN DECLARE @i INT SET @Sql = RTrim (LTrim (@Sql)) SET @i = CharIndex (@Splits, @Sql) WHILE @i >= 1 BEGIN INSERT @temp VALUES (Left (@Sql, @i - 1)) SET @Sql = SubString (@Sql, @i + 1, Len (@Sql) - @i) SET @i = CharIndex (@Splits, @Sql) END IF @Sql <> '' INSERT @temp VALUES (@Sql) RETURN END
http://www.cnblogs.com/fang-beny/archive/2013/08/13/3255171.htmlhtml
http://technet.microsoft.com/zh-cn/library/ms175156%28v=sql.90%29.aspxsql
使用 APPLY 運算符能夠爲實現查詢操做的外部表表達式返回的每一個行調用表值函數。表值函數做爲右輸入,外部表表達式做爲左輸入。經過對右輸入求值來得到左輸入每一行的 計算結果,生成的行被組合起來做爲最終輸出。APPLY 運算符生成的列的列表是左輸入中的列集,後跟右輸入返回的列的列表。app
APPLY 有兩種形式:CROSS APPLY 和 OUTER APPLY。CROSS APPLY 僅返回外部表中經過表值函數生成結果集的行。OUTER APPLY 既返回生成結果集的行,也返回不生成結果集的行,其中表值函數生成的列中的值爲 NULL。ide
CREATE TABLE Employees ( empid int NOT NULL, mgrid int NULL, empname varchar(25) NOT NULL, salary money NOT NULL, CONSTRAINT PK_Employees PRIMARY KEY(empid), ) CREATE TABLE Departments ( deptid INT NOT NULL PRIMARY KEY, deptname VARCHAR(25) NOT NULL, deptmgrid INT NULL REFERENCES Employees ) CREATE FUNCTION dbo.fn_getsubtree(@empid AS INT) RETURNS @TREE TABLE ( empid INT NOT NULL, empname VARCHAR(25) NOT NULL, mgrid INT NULL, lvl INT NOT NULL ) AS BEGIN WITH Employees_Subtree(empid, empname, mgrid, lvl) AS ( -- Anchor Member (AM) SELECT empid, empname, mgrid, 0 FROM Employees WHERE empid = @empid UNION all -- Recursive Member (RM) SELECT e.empid, e.empname, e.mgrid, es.lvl+1 FROM Employees AS e JOIN Employees_Subtree AS es ON e.mgrid = es.empid ) INSERT INTO @TREE SELECT * FROM Employees_Subtree RETURN END GO SELECT * FROM Departments AS D CROSS APPLY fn_getsubtree(D.deptmgrid) AS ST
if object_id('tempdb..#CategoryDetail') is not null drop table #CategoryDetail create TABLE #CategoryDetail ( [Id] [int], [CategoryId] [int], [Cry] [varchar](50)) INSERT into #CategoryDetail ([Id], [CategoryId], [Cry]) VALUES (1, 1, N'喵') INSERT into #CategoryDetail ([Id], [CategoryId], [Cry]) VALUES (2, 2, N'汪') select * from #CategoryDetail; if object_id('tempdb..#Category') is not null drop table #Category create TABLE #Category ( [Id] [int], [Name] [varchar](50)) INSERT into #Category ([Id], [Name]) VALUES (1, N'Cat') INSERT into #Category ([Id], [Name]) VALUES (2, N'Dog') INSERT into #Category ([Id], [Name]) VALUES (3, N'Tiger') select * from #Category; select * from #Category a cross apply (select * from #CategoryDetail b where b.CategoryId=a.Id) c select * from #Category a outer apply (select * from #CategoryDetail b where b.CategoryId=a.Id) c
http://www.cnblogs.com/A2008A/archive/2011/03/11/1981828.html 函數
http://www.cnblogs.com/lwhkdash/archive/2012/06/26/2562979.htmlspa
WEEK INCOME
星期一 1000
星期二 2000
星期三 3000
星期四 4000
星期五 5000
星期六 6000
星期日 7000code
星期一 星期二 星期三 星期四 星期五 星期六 星期日
1000 2000 3000 4000 5000 6000 7000htm
SELECT SUM(CASE WEEK WHEN '星期一' THEN INCOME END) AS [星期一], SUM(CASE WEEK WHEN '星期二' THEN INCOME END) AS [星期二], SUM(CASE WEEK WHEN '星期三' THEN INCOME END) AS [星期三], SUM(CASE WEEK WHEN '星期四' THEN INCOME END) AS [星期四], SUM(CASE WEEK WHEN '星期五' THEN INCOME END) AS [星期五], SUM(CASE WEEK WHEN '星期六' THEN INCOME END) AS [星期六], SUM(CASE WEEK WHEN '星期日' THEN INCOME END) AS [星期日] FROM WEEK_INCOME SELECT [星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日] FROM WEEK_INCOME PIVOT ( SUM(INCOME) for [week] in([星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日]) )TBL
DECLARE @t1 TABLE ( c1 INT, c2 INT );
SELECT c1, c2 FROM @t1 ORDER BY CASE WHEN c1 >= 3 THEN 1 ELSE 2 END, CASE WHEN c2 <= 3 THEN 1 ELSE 2 END
c1 | c2 | c1排序 | c2排序 |
4 | 1 | 1 | 1 |
4 | 2 | 1 | 1 |
3 | 6 | 1 | 2 |
3 | 5 | 1 | 2 |
1 | 3 | 2 | 1 |
1 | 2 | 2 | 1 |
2 | 2 | 2 | 1 |
2 | 1 | 2 | 1 |
1 | 4 | 2 | 2 |
x.待續blog