sql - STUFF FOR XML PATH - 将多行组合成一个单列单元格
问题描述
假设我在一个看起来像这样的表中有数据
Num1 Type1 Type2 Acct Ind
--- ---- ---- --- ---
1X2 XXX CA 111 ERROR
1X2 XXX CA 222 ERROR
X22 XXX CA 111 ERROR
X22 XXX CA 222 ERROR
X22 XXX CA 333 ERROR
X22 XXX CA 444 ERROR
我想要实现的是添加一个新列,并最终实现如下所示:
Num1 Type1 Type2 Acct Ind Acct_List
--- ---- ---- --- --- --------
1X2 XXX CA 111 ERROR 111,222
1X2 XXX CA 222 ERROR 111,222
X22 XXX CA 111 ERROR 111,222,333,444
X22 XXX CA 222 ERROR 111,222,333,444
X22 XXX CA 333 ERROR 111,222,333,444
X22 XXX CA 444 ERROR 111,222,333,444
我试图做这样的事情:
SELECT Num1, Type1, Type2, Acct, Ind, 'Acct_List' = STUFF((SELECT ', ' + CAST(ACCT AS VARCHAR(55)) FROM Table FOR XML PATH (''),1,1,'')
FROM Table
WHERE IND='ERROR'
GROUP BY Num1, Type1, Type2, IND
但是,使用此代码会发生什么,每一行都返回 ACCT_LIST 中的所有 ACCT
有没有办法让这个看起来像结果数据?
解决方案
您缺少 where 子句:
SELECT Num1, Type1, Type2, Acct, Ind, 'Acct_List' = STUFF((SELECT ', ' + CAST(ACCT AS VARCHAR(55)) FROM Table t1 WHERE t1.Num1 = t2.Num1 FOR XML PATH (''),1,1,'')
FROM Table t2
WHERE IND='ERROR'
GROUP BY Num1, Type1, Type2, IND
推荐阅读
- c# - 如何找出 Outlook 中有多少位版本的加载项?
- tkinter - 如何在 Tkinter 中创建可滚动的按钮列表?
- reactjs - 如何处理material-ui DataGrid中的错误?
- django - Django QS按嵌套注释字段过滤
- better-sqlite3 - better-sqlite3 - 找不到绑定文件
- reactjs - 反应原生
另一个内部的组件 零件 - authentication - 在不同的服务器中模拟 Windows 用户
- php - NMI 意外的 HTTP 响应:0
- javascript - 当输入长度在 1 到 20 之间时,我想更改文本字段的类别并添加反馈消息,但我不知道为什么它不起作用
- grafana - 计算列中值的实例以显示在饼图中