简体   繁体   English

STRING_AGG 除了来自另一列的特定字符串

[英]STRING_AGG except specific string from another column

I wanna know how to exclude specific string in STRING_AGG?我想知道如何排除 STRING_AGG 中的特定字符串? Here's my original query I want to exclude from the concatenation for a specific value on column name PRIMARY.这是我想要从列名 PRIMARY 上的特定值的串联中排除的原始查询。 Sorry I don't know how to use correct format, I will attach image instead for clear picture of my scenario.对不起,我不知道如何使用正确的格式,我会附上图片来代替我的场景的清晰图片。 在此处输入图像描述

SELECT t1.ID, t1.NAME, STRING_AGG(Trim(t2.COUNTRY), ';') WITHIN GROUP(ORDER BY COUNTRY) COUNTRY, PRIMARY FROM t1 LEFT JOIN t2 on t1.ID=t2.ID GROUP BY t1.ID,t1.NAME,t1.PRIMARY SELECT t1.ID, t1.NAME, STRING_AGG(Trim(t2.COUNTRY), ';') WITHIN GROUP(ORDER BY COUNTRY) COUNTRY, PRIMARY FROM t1 LEFT JOIN t2 on t1.ID=t2.ID GROUP BY t1.ID ,t1.NAME,t1.PRIMARY

t1 t1

ID NAME PRIMARY 1 WHITE US 2 RED CA 3 BLUE US 4 GREEN GB ID 名称 PRIMARY 1 WHITE US 2 RED CA 3 BLUE US 4 GREEN GB

t2 ID COUNTRY 1 US 1 CA 2 GB 2 DE 3 DE 3 CA 4 CA 4 DE 4 US t2 ID COUNTRY 1 US 1 CA 2 GB 2 DE 3 DE 3 CA 4 CA 4 DE 4 US

RESULT: ID NAME PRIMARY COUNTRY 1 WHITE US CA (EXCEPT US BECAUSE IT'S ALREADY IN PRIMARY) 2 RED CA GB;DE结果: ID NAME PRIMARY COUNTRY 1 WHITE US CA(除了美国,因为它已经在 PRIMARY)2 RED CA GB;DE
3 BLUE US DE;CA 3 蓝色美国德;加
4 GREEN DE CA;DE;US (EXCEPT DE BECAUSE IT'S ALREADY IN PRIMARY) 4 GREEN DE CA;DE;US(DE 除外,因为它已经在小学)

Just use a case expression:只需使用case表达式:

STRING_AGG(CASE WHEN t2.Country <> Primary THEN Trim(t2.COUNTRY) END, ';') WITHIN GROUP (ORDER BY COUNTRY)

STRING_AGG() ignores NULL values. STRING_AGG()忽略NULL值。

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

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