【发布时间】:2021-09-18 09:03:11
【问题描述】:
不知道为什么我不断收到与此查询重复。这应该很容易,但由于某种原因我无法弄清楚。
这是我的查询:
SELECT DISTINCT
STUFF((SELECT
'; ' +
CASE
WHEN staff.lastname IS NOT NULL
THEN UPPER(REPLACE(RTRIM(staff.lastname), ' ', '') + ', ' + RTRIM(staff.firstname))
ELSE UPPER('Not Assigned')
END
FROM
ca_case_assign ca
JOIN
staff ON staff.username = ca.staffusername
JOIN
tbl_case c on ca.appid = c.col_caseid
WHERE
ca.clientusername = c.col_username
FOR XML PATH('')), 1, 1, '') [CaseManager]
这是我得到的结果:
LOCALSTAFF, THERESA; LOCALSTAFF, THERESA; O'MALLEY, ELLEN; STAFF, STATE; STAFF, STATE; STAFF, STATE; STAFF, STATE; STAFF, STATE; STAFF, BC; STAFF, BC; STAFF, BC; STAFF, BC; STAFF, BC; STAFF, BC; STAFF, BC;
这显然是不正确的。
请帮忙,谢谢。
【问题讨论】:
-
请提供您在此查询中使用的示例数据集,以使其成为minimal, reproducible example。还请为正在使用的 DBMS 实现添加特定标签(例如 MySQL、PostgreSQL、Oracle、MS SQL Server、IBM DB2 等)
-
尝试在此添加排序 - UPPER(REPLACE(RTRIM(staff.lastname), ' ', '') + ', ' + RTRIM(staff.firstname))...然后把INNER 查询中的不同
-
您选择一个标量值,在一行中没有什么可区分的。您需要将
distinct放入内部查询 -
对于 SQL Server 2017+ 也可以使用
string_agg,这样更易读
标签: sql join select duplicates distinct