码迷,mamicode.com
首页 > 其他好文 > 详细

用,号分割的编号串字段,如何实现类似left join效果

时间:2017-09-27 22:28:39      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:insert   returns   substring   函数   end   ble   table   union   exists   

CREATE TABLE #table1(id INt,title VARCHAR(50))
INSERT INTO #table1 (id,
title)

SELECT 1,‘afafaa‘
UNION ALL

SELECT 2,‘dsaf‘
UNION ALL

SELECT 3,‘dsssaf‘
UNION ALL

SELECT 4,‘qqwe‘
UNION ALL

SELECT 51,‘ewrd‘
CREATE TABLE #table2(id INT,title VARCHAR(50),t1ids VARCHAR(50))
INSERT INTO #table2
( id, title, t1ids )
VALUES ( 1, -- id - int
‘111‘, -- title - varchar(50)
‘1,4,5‘ -- t1ids - int
)


SELECT t1.*,(CASE ISNULL(t.VALUE,0) WHEN 0 THEN 0 ELSE 1 end)AS iflag FROM #table1 t1 LEFT JOIN (
SELECT a.*,b.Value
FROM #table2 a
CROSS APPLY(SELECT Value FROM dbo.fn_split(a.t1ids,‘,‘,1)) b)AS t
ON t1.id = t.value

--函数定义
CREATE FUNCTION [dbo].[fn_split] ( @String NVARCHAR(MAX) ,
@Str NVARCHAR(20),
@distinct BIT )
RETURNS @table TABLE ( Value NVARCHAR(MAX),orders int)
AS
BEGIN

DECLARE @i INT ,
@j INT ,
@l INT ,
@v NVARCHAR(MAX),
@orders int

SET @i = 0
SET @j = 0
SET @l = LEN(@String)
set @orders=1

WHILE ( @j < @l )
BEGIN
SET @j = CHARINDEX(@Str, @String, @i + 1)
IF @j = 0
SET @j = @l + 1
SET @v = SUBSTRING(@String, @i + 1, @j - @i - 1 )

IF @v <> ‘‘ AND (@distinct = 0 OR NOT EXISTS (SELECT 1 FROM @table WHERE Value = @v))
INSERT INTO @table
VALUES ( LTRIM(RTRIM(@v)),@orders)

SET @i = @j + LEN(@Str) - 1
set @orders=@orders+1
END
RETURN
END

用,号分割的编号串字段,如何实现类似left join效果

标签:insert   returns   substring   函数   end   ble   table   union   exists   

原文地址:http://www.cnblogs.com/OwenZeng/p/7604250.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!