【发布时间】:2021-05-12 02:57:55
【问题描述】:
我有一张像这样的employee_table表
org employeeid (int) firstname lastname
1234 56788934 Suresh Raina
1234 56793904 Virat Kohli
然后我有 project_table 是这样的
Project members (varchar)
A123 56788934,56793900
现在我需要像这样在一行中获取相应的员工姓名和东西。
Project members (varchar)
A123 Suresh Raina, Virat Kohli
我在下面写了不起作用的查询。请帮忙。
SELECT project,
(
SELECT message_text = Stuff(
(
SELECT ', ' + Concat(firstname,' ',lastname)
FROM employee_table t1
WHERE t1.org = t2.org
AND CONVERT(VARCHAR,t1.userid) IN (Concat('''',Replace(pt.members,',',''','''),'''')) --adding single quotes at start and end of each number
FOR xml path ('')) , 1, 1, '')
FROM employee_table t2
WHERE t2.userid IN
group BY org;) FROM project_table pt
【问题讨论】:
-
您的 SQL Server 版本是多少?
-
为什么它不起作用?它会出错吗?它会给出不正确的结果吗?
-
在提出问题时,您需要提供一个可重现的最小示例。请参考以下链接:stackoverflow.com/help/minimal-reproducible-example 请提供以下内容: (1) DDL 和样本数据填充,即 CREATE table(s) 加上 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上面#1 中的样本数据。 (4) 你的 SQL Server 版本 (SELECT @@version;)
-
修复您的设计,不要在数据库中存储分隔数据。解决这个问题,您的问题就会消失。
-
CONVERT(VARCHAR,t1.userid)始终指定 (n)varchar 的长度
标签: sql sql-server split string-aggregation stuff