繁体   English   中英

SQL:如何从 string_Agg() 函数中获取不同的值?

[英]SQL: How to get distinct values out of string_Agg() function?

以下代码

SELECT 
      DISTINCT(p.ID) AS ID
    , PIT.Code AS Code
    , year(PT.Date) AS Year
FROM fact.PreT PT
INNER JOIN dim.ProdIType PIT 
    ON PIT.ProdITypeSKey = PT.ProdITypeSKey
INNER JOIN dim.Proudct P
    ON P.ProductSKey = pt.ProductSKey
WHERE p.ID = '15'
GROUP BY p.ID, PIT.Code, PT.Year

返回以下内容:

代码表

我已经重新配置了我的脚本以添加聚合并按 id 和年份对代码进行分组,但是发现了重复项。 代码和输出如下:

SELECT 
      DISTINCT(p.ID) AS ID
    , string_agg(PIT.Code, ',') AS Code
    , year(PT.Date) AS Year
FROM fact.PreT PT
INNER JOIN dim.ProdIType PIT 
    ON PIT.ProdITypeSKey = PT.ProdITypeSKey
INNER JOIN dim.Proudct P
    ON P.ProductSKey = pt.ProductSKey
WHERE p.ID = '15'
GROUP BY p.ID, PT.Year

结果:

错误的输出

所需的输出 - 不同且有序的代码升序:

在此处输入图片说明

有人可以解释为什么 string_acc 是重复代码吗? 我应该如何解决这个问题?

您需要对其进行子查询并再次分组。 请注意, DISTINCT不是函数,它作用于整个结果集,并且与按所有列分组相同。

SELECT 
      ID
    , string_agg(Code, ',') AS Code
    , [Year]
FROM (
    SELECT
          p.ID
        , PIT.Code AS Code
        , year(PT.Date) AS Year
    FROM fact.PreT PT
    INNER JOIN dim.ProdIType PIT 
        ON PIT.ProdITypeSKey = PT.ProdITypeSKey
    INNER JOIN dim.Proudct P
        ON P.ProductSKey = pt.ProductSKey
    WHERE p.ID = '15'
    GROUP BY p.ID, year(PT.Date), PIT.Code
) p
GROUP BY p.ID, PT.Year;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM