在 SQL Server 中创建返回 nvarchar 的用户定义聚合函数

问题描述 投票:0回答:1

我需要创建一个聚合函数来用于汇总数据。

如果列中超过 1 个不同值,该函数基本上应返回“#”;如果列中只有一个不同值,则该函数应返回该值。

到目前为止我尝试的是;

CREATE FUNCTION dbo.my_agg(@mycol NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @result NVARCHAR(MAX);

    SELECT @result = CASE
                        WHEN COUNT(DISTINCT @mycol) = 1 THEN MAX(@mycol)
                        ELSE '#'
                    END

    RETURN @result;
END;

然后我意识到用户定义的函数不能在聚合中使用,我需要通过 group by 在分组数据中运行此函数。

我认为定义应该以

CREATE AGGREGATE
开头,但找不到如何实现。

提前致谢。

sql-server aggregate-functions
1个回答
0
投票

只是猜测,但这也许会有所帮助。

这将动态 UNPIVOT 您的数据(无需使用动态 SQL)

示例或dbFiddle

CREATE FUNCTION dbo.my_agg(@mycol NVARCHAR(50))
RETURNS NVARCHAR(MAX)
AS
BEGIN
 Return  (
           Select case when count(distinct Value) =1 then max(Value) else '#' end
             From  YourTable A   -- <<<< MUST SPECIFY YOUR TABLE HERE 
             Cross Apply ( Select * 
                           From  OpenJson((Select A.* For JSON Path,Without_Array_Wrapper )) 
                           Where [Key] = @mycol
                 ) B
    )
END
© www.soinside.com 2019 - 2024. All rights reserved.