我需要创建一个聚合函数来用于汇总数据。
如果列中超过 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
开头,但找不到如何实现。
提前致谢。
只是猜测,但这也许会有所帮助。
这将动态 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