【发布时间】:2021-10-04 22:10:58
【问题描述】:
我想在 IN 子句中使用串联字符串的结果。
这是我的 SQL 查询:
UPDATE Customer
SET Agent = 'Test'
WHERE CAST(ID AS VARCHAR) IN (
SELECT IIF((
SELECT WinnerID
FROM Customer
WHERE ID = '19560'
) IS NULL, '19560', (
SELECT STUFF((
SELECT ',' + CAST(ID AS VARCHAR)
FROM Customer
WHERE WinnerID = '19560'
FOR XML PATH('')
), 1, 1, '') --returns 19560, 19686
))
)
IIF 函数中表达式返回 false 的部分是问题所在。返回正确的值,但无法正确识别,因此不会更新表格。
这是带有一些示例日期的表结构
| ID | WinnerID | CustomerName | Agent |
|---|---|---|---|
| 19560 | 19560 | Carman Sansone | NULL |
| 19686 | 19560 | Melania Snowden | NULL |
| 19404 | NULL | Esther Flansburg | NULL |
| 19405 | NULL | Maximo Schill | NULL |
| 20055 | 20055 | Jeanice Moen | NULL |
| 20056 | 20055 | Kraig Rochin | NULL |
WinnerID 是重复解析的结果。因此,拥有相同 WinnerID 的两个客户是同一个客户,应该分配到同一个代理。
有什么方法可以制定这部分查询,以便我可以使用 IN 子句?或者重新制定整个查询以达到预期的结果?
【问题讨论】:
-
请在此处添加示例数据并向我们展示表结构。你甚至可能不需要在这里使用
STUFF。
标签: sql sql-server tsql in-clause