【发布时间】:2018-07-19 17:49:50
【问题描述】:
表格是:
+----+------+
| Id | Name |
+----+------+
| 1 | aaa |
| 1 | bbb |
| 1 | ccc |
| 1 | ddd |
| 1 | eee |
+----+------+
需要的输出:
+----+---------------------+
| Id | abc |
+----+---------------------+
| 1 | aaa,bbb,ccc,ddd,eee |
+----+---------------------+
查询:
SELECT
ID,
abc = STUFF((SELECT ',' + name
FROM temp1
FOR XML PATH ('')), 1, 1, '')
FROM
temp1
GROUP BY
id
此查询工作正常。我现在想做的是在选择中添加case 语句。如果 XML 为 NULL,则显示“未找到名称”,但当我尝试执行此操作时 SQL Server 会抛出错误。
这样使用时会抛出此错误(见下文)
SELECT
ID,
abc = CASE
STUFF((SELECT ',' + name
FROM temp1
FOR XML PATH ('')), 1, 1, '') IS NOT NULL
THEN abc
ELSE 'No names found'
FROM
temp1
GROUP BY
id
错误:
在预期条件的上下文中指定的非布尔类型的表达式
或者这样使用时
SELECT
ID,
CASE abc = STUFF((SELECT ',' + name
FROM temp1
FOR XML PATH ('')), 1, 1, '') IS NOT NULL
THEN abc
ELSE 'No names found'
FROM
temp1
GROUP BY
id
错误:
列名 abc 无效
如何向case 语句添加函数调用?
【问题讨论】:
-
您在 CASE 语句中的语法不正确。 CASE 结构为
CASE <Test> <Action>或CASE <Value> <IsValue?> <Action>。你的语法是CASE <Action> <Test> <Action>。
标签: sql sql-server case