2015-10-21 41 views
1

我怎樣才能從application_data如何聯繫sqlserver中的數據?

enter image description here

選擇ID,名稱來自SERVICE_TYPE得到這樣

選擇的service_id數據

enter image description here

我試圖得到像t這樣的輸出他的基礎上,ID數據應該concate這樣

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(''[email protected]+'',',',''',''')+''')' 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'))

但我仍面臨的問題的數據。

指導我如何實現這一點..

+1

逗號分隔值?不要像這樣存儲數據,它只會導致你很多問題。每行一個值就是SQL方式! – jarlh

+0

是的,我知道這個問題......它的數據庫是這樣設計的......我正在研究一些新的模塊......它是由其他開發人員開發的......這樣我就面臨着問題...你能建議我如何獲得數據? –

回答

0

CREATE FUNCTION回報ID, Nam E對於每一行包圍的ID在application_data

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) 
+0

我在執行存儲過程時出錯 –

0

這也許是有用的: 添加在前面的逗號和的service_id在application_data表背面,使用PATINDEX找到用逗號

+0

你能提供一個這樣的數據的例子嗎? –

+0

如果我有時間我會很高興。您仍然需要遍歷記錄來合併service_name中的數據,儘管... 當您面對這些類型的數據集時,這不是一件愉快的工作。 – Tom