Функция SQL Server, которая возвращает строку с разделителями - PullRequest
2 голосов
/ 21 сентября 2010

Эй, у меня есть такая таблица:

ID  BitOne  BitTwo  BitThree
--  ------  ------  --------
99  NULL    1       NULL
99  1       NULL    NULL

И мне нужна пользовательская функция, которая возвращает строку «BitTwo, BitOne» для идентификатора: 99 - которая будет входным параметром для функции.

Возможно ли это?

Ответы [ 4 ]

2 голосов
/ 22 сентября 2010
Use [SOFDB1]

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- exec SELECT dbo.GetString(7)  
ALTER FUNCTION dbo.GetString 
(   
    @ID BIGINT 
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @RESULT_STRING nvarchar(max);
    SELECT 
        @RESULT_STRING = CONVERT(nvarchar,(CASE
            WHEN t.BitOne IS NOT NULL THEN CONVERT(varchar,t.BitOne)
            ELSE 'NULL'
            END) + ',' +
        (CASE
            WHEN t.BitTwo IS NOT NULL THEN CONVERT(varchar,t.BitTwo)
            ELSE 'NULL'
            END) + ',' +
        (CASE
            WHEN t.BitThree IS NOT NULL THEN CONVERT(varchar, t.BitThree)
            ELSE 'NULL'
            END)) FROM TestTable1 t WHERE t.ID = @ID

    RETURN @RESULT_STRING
END

и вызовите

в sp или что-то еще, чтобы получить значение этой функции >>>> ВЫБРАТЬ dbo.GetString (theIDtoPass)

2 голосов
/ 21 сентября 2010

Функция:

CREATE FUNCTION getList (
@id_parameter INT
)
RETURNS VARCHAR(MAX)
AS
BEGIN

  DECLARE @result VARCHAR(MAX)

  SELECT @result = MAX(CASE WHEN t.bitone = 1 THEN 'bitone' ELSE '' END) +','+
                   MAX(CASE WHEN t.bittwo = 1 THEN 'bittwo' ELSE '' END)
    FROM your_table t
   WHERE t.id = @id_parameter
GROUP BY t.id

 RETURN @result

END
GO

Использование:

  SELECT MAX(CASE WHEN t.bitone = 1 THEN 'bitone' ELSE '' END) +','+
         MAX(CASE WHEN t.bittwo = 1 THEN 'bittwo' ELSE '' END)
    FROM TABLE t
   WHERE t.id = @id_parameter
GROUP BY t.id

Но было бы полезно узнать, как вы хотите обрабатывать, когда значение id не имеет значения для bitone, bittwo и т. Д. Если оба значения равны NULL или не равны 1, то вы все равно получите запятую назад в результате.

0 голосов
/ 17 апреля 2014
Please try this solution.

DECLARE @Colors VARCHAR(MAX)
SELECT @Colors = ISNULL(@Colors + ', ', '') + cmnColor.Name
FROM  [dbo].[CMN_Sel_Colors] as cmnColor
INNER JOIN [dbo].[Sel_ItemColor] AS itemcolor ON itemcolor.ColorID = cmnColor.ColorID
WHERE itemcolor.ItemID = @ItemID

RETURN @Colors
0 голосов
/ 21 сентября 2010

Хорошо создана таблица с 4 полями ID - BigInt

BitOne - BigInt

BitTwo - BigInt

BitThree - BigInt

Пример данных

1 1 NULL 1 >>> Вывод '1, NULL, 1'

2 1 NULL NULL >>> Вывод '1, NULL, NULL'

3 NULL 1 NULL>>> Вывод 'NULL, 1, NULL'

4 NULL 1 1 >>> Вывод 'NULL, 1,1'

5 1 1 1 >>> Вывод '1,1, 1 '

QUERY >>>>>

SELECT 
    CONVERT(nvarchar,(CASE
        WHEN t.BitOne IS NOT NULL THEN CONVERT(varchar,t.BitOne)
        ELSE 'NULL'
        END) + ',' +
    (CASE
        WHEN t.BitTwo IS NOT NULL THEN CONVERT(varchar,t.BitTwo)
        ELSE 'NULL'
        END) + ',' +
    (CASE
        WHEN t.BitThree IS NOT NULL THEN CONVERT(varchar, t.BitThree)
        ELSE 'NULL'
        END)) AS RESULTSTRING from TestTable1 t WHERE t.ID = @ID

Вы можете заменить' NULL 'на' ', чтобы создать там пустую строку, или можете поместить любую строку

Hopeэто помогает

С уважением, J'Sinh

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...