sql - 满足条件后追加字符串的函数
问题描述
我正在尝试在 SQL Server 中编写标量值函数,并且我想在满足条件后附加一个字符串。
如果列 gdpr_aj = 'a' 那么我需要在列 gdpr_sa = 'a' 时附加一个字符串'aj' 然后我需要在列 gdpr_vs = 'a' 时附加一个字符串'sa' 然后我需要附加一个字符串'vs '。
Example data
id | gdpr_aj | gdpr_sa | gdpr_vs |
1 | 'a' | 'a' | 'n' |
2 | 'n' | 'n' | 'a' |
3 | 'n' | 'n' | 'n' |
4 | 'a' | 'a' | 'a' |
所需的结果集应该是
first row @myString = 'aj,sa'
second row @myString = 'vs'
third row @myString = ''
fourth row @myString = 'aj,sa,vs'
我的功能现在看起来像这样
alter function dbo.fn_test (@id as int)
returns varchar(max)
as
begin
declare @myString varchar(max)
declare
@gdpr_aj char(1),
@gdpr_sa char(1),
@gdpr_vs char(1)
select
@gdpr_aj = sz.gdpr_aj,
@gdpr_sa = sz.gdpr_sa,
@gdpr_vs = sz.gdpr_vs
from dbo.sz sz where sz.id = @id
if @gdpr_aj = 'a' set @myString = 'aj,'
if @gdpr_sa = 'a' set @myString = 'sa,'
if @gdpr_vs = 'a' set @myString = 'vs'
return @myString
end
解决方案
试试下面的代码,如果任何字段匹配,您总是将@myString 设置为新值。
CREATE FUNCTION dbo.fn_test (@id AS INT)
RETURNS NVARCHAR(max)
AS
BEGIN
DECLARE @output NVARCHAR(10)
SELECT @output = CONCAT (
IIF(gdpr_aj = 'a', 'aj,', '')
,IIF(gdpr_sa = 'a', 'sa,', '')
,IIF(gdpr_vs = 'a', 'vs', '')
)
FROM data
WHERE id = @id
--SELECT @output
RETURN @output
END
SELECT dbo.fn_test(4)