如何在sqlserver中联系数据?

时间:2015-10-21 09:24:27

标签: sql sql-server

我如何获得这样的数据

从application_data

中选择Service_id

enter image description here

从service_type中选择ID,名称

enter image description here

我正在尝试获得这样的输出,基于id数据应该像这样结合

enter image description here

我试图在函数中获取数据

ALTER FUNCTION [dbo].[get_service_type] 
(@serviceid VARCHAR(50))
RETURNS VARCHAR(50)
AS
BEGIN
    declare @sql varchar(500), @s1 varchar(500)
    SET @s1=( select '('''+REPLACE(''+@serviceid+'',',',''',''')+''')' as Str)  
    DECLARE @listStr VARCHAR(MAX)   
    SELECT @listStr = COALESCE(@listStr+',' , '') + name 
    FROM service_type  
    WHERE id !=0 and id in(@serviceid)  
RETURN @s1
END

select dbo.dbo.serviceType_Split('23,24,25'))

但我仍然面临着这个问题......

指导我如何实现这一目标..

2 个答案:

答案 0 :(得分:0)

也许这很有用: 在application_data表的service_id的前面和后面添加一个逗号,并使用PATINDEX查找逗号包含的id

答案 1 :(得分:0)

CREATE FUNCTIONID, Nam

中的每一行返回application_data e
 CREATE FUNCTION dbo.fnCSVStr2Table(@CSVStr VARCHAR(1000)) 
 RETURNS VARCHAR(1000)
 AS
 BEGIN
    DECLARE @Tbl TABLE (service_id VARCHAR(50), service_name VARCHAR(100))
    DECLARE @SubStr VARCHAR(100), @i INT
    DECLARE @List_service_name VARCHAR(1000)
    SET @i = CHARINDEX(',', @CSVStr, 0)
    WHILE @i > 0
    BEGIN
        SET @SubStr = LEFT(@CSVStr,@i-1)
        INSERT INTO @Tbl
        SELECT * FROM service_type WHERE id = @SubStr

        SET @CSVStr = SUBSTRING(@CSVStr, @i+1, 1000)
        SET @i = CHARINDEX(',', @CSVStr, 0)
    END 

    INSERT INTO @Tbl
    SELECT * FROM service_type WHERE id = LTRIM(RTRIM(@CSVStr))
    SELECT @List_service_name = COALESCE(@List_service_name + ', ', '') + service_name
    FROM @Tbl
    WHERE service_name IS NOT NULL
    RETURN @List_service_name
END

然后,选择:

SELECT service_id
FROM application_data
CROSS APPLY fnCSVStr2Table(service_id)