22,209
社区成员
发帖
与我相关
我的任务
分享
SELECT * FROM #tmp
WHERE
(ID = ID1-1 AND ID=ID2-2 AND ID=ID3-3) OR
(ID = ID2-1 AND ID=ID3-2 AND ID=ID4-3) OR
(ID = ID3-1 AND ID=ID4-2 AND ID=ID5-3) OR
(ID = ID4-1 AND ID=ID5-2 AND ID=ID6-3)
USE tempdb
GO
IF OBJECT_ID('dbo.Fun_GetEqualDiffCnt') IS NOT NULL
DROP FUNCTION dbo.Fun_GetEqualDiffCnt
GO
IF OBJECT_ID('TEMPDB..#TMP') IS NOT NULL DROP TABLE #tmp
CREATE TABLE #tmp(A VARCHAR(20),ID INT,ID1 INT,ID2 INT,ID3 INT,ID4 INT,ID5 INT,ID6 INT)
INSERT #tmp
( A, ID, ID1, ID2, ID3, ID4, ID5, ID6 )
SELECT 'A',1,0,2,3,0,3,2 UNION ALL
SELECT 'B',1,2,2,3,0,3,2 UNION ALL
SELECT 'C',1,0,0,3,3,3,2 UNION ALL
SELECT 'D',1,0,1,3,0,3,2 UNION ALL
SELECT 'E',1,1,0,3,0,4,2 UNION ALL
SELECT 'F',1,0,2,3,0,2,2 UNION ALL
SELECT 'G',1,0,2,3,4,3,4
SELECT * FROM #tmp
WHERE
(id>0 AND id1>0 AND id2>0)
OR
(id1>0 AND id2>0 AND id3>0)
OR
(id2>0 AND id3>0 AND id4>0)
OR
(id3>0 AND id4>0 AND id5>0)
OR
(id4>0 AND id5>0 AND id6>0)
CREATE TABLE #tmp(A VARCHAR(20),ID INT,ID1 INT,ID2 INT,ID3 INT,ID4 INT,ID5 INT,ID6 INT)
INSERT #tmp
( A, ID, ID1, ID2, ID3, ID4, ID5, ID6 )
SELECT 'A',1,0,2,3,0,3,2 UNION ALL
SELECT 'B',1,2,2,3,0,3,2 UNION ALL
SELECT 'C',1,0,0,3,3,3,2 UNION ALL
SELECT 'D',1,0,1,3,0,3,2 UNION ALL
SELECT 'E',1,1,0,3,0,4,2 UNION ALL
SELECT 'F',1,0,2,3,0,2,2 UNION ALL
SELECT 'G',1,0,2,3,4,3,4
--测试数据结束
--创建一个字符串分割函数
CREATE FUNCTION [dbo].[f_splitSTR](
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
DECLARE @splitlen int
SET @splitlen=LEN(@split+'a')-2
WHILE CHARINDEX(@split,@s)>0
BEGIN
INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
END
INSERT @re VALUES(@s)
RETURN
END
--调用函数
;WITH cte AS (
SELECT *,CAST(id AS VARCHAR(20))
+CAST(id1 AS VARCHAR(20))
+CAST(id2 AS VARCHAR(20))
+CAST(id3 AS VARCHAR(20))
+CAST(id4 AS VARCHAR(20))
+CAST(id5 AS VARCHAR(20))
+CAST(id6 AS VARCHAR(20)) AS num
FROM #tmp
),
cte2 AS (
SELECT * FROM cte a
OUTER APPLY dbo.f_splitSTR(a.num,'0') b
)
SELECT * FROM cte2
WHERE LEN(col)>=3
[/quote]
大神 我错了!!!!
CREATE TABLE #tmp(A VARCHAR(20),ID INT,ID1 INT,ID2 INT,ID3 INT,ID4 INT,ID5 INT,ID6 INT)
INSERT #tmp
( A, ID, ID1, ID2, ID3, ID4, ID5, ID6 )
SELECT 'A',1,0,2,3,0,3,2 UNION ALL
SELECT 'B',1,2,2,3,0,3,2 UNION ALL
SELECT 'C',1,0,0,3,3,3,2 UNION ALL
SELECT 'D',1,0,1,3,0,3,2 UNION ALL
SELECT 'E',1,1,0,3,0,4,2 UNION ALL
SELECT 'F',1,0,2,3,0,2,2 UNION ALL
SELECT 'G',1,0,2,3,4,3,4
--测试数据结束
--创建一个字符串分割函数
CREATE FUNCTION [dbo].[f_splitSTR](
@s varchar(8000), --待分拆的字符串
@split varchar(10) --数据分隔符
)RETURNS @re TABLE(col varchar(100))
AS
BEGIN
DECLARE @splitlen int
SET @splitlen=LEN(@split+'a')-2
WHILE CHARINDEX(@split,@s)>0
BEGIN
INSERT @re VALUES(LEFT(@s,CHARINDEX(@split,@s)-1))
SET @s=STUFF(@s,1,CHARINDEX(@split,@s)+@splitlen,'')
END
INSERT @re VALUES(@s)
RETURN
END
--调用函数
;WITH cte AS (
SELECT *,CAST(id AS VARCHAR(20))
+CAST(id1 AS VARCHAR(20))
+CAST(id2 AS VARCHAR(20))
+CAST(id3 AS VARCHAR(20))
+CAST(id4 AS VARCHAR(20))
+CAST(id5 AS VARCHAR(20))
+CAST(id6 AS VARCHAR(20)) AS num
FROM #tmp
),
cte2 AS (
SELECT * FROM cte a
OUTER APPLY dbo.f_splitSTR(a.num,'0') b
)
SELECT * FROM cte2
WHERE LEN(col)>=3