sql - 如何连接多行的结果
问题描述
我目前在 SQL Server 中有一个视图,如下所示:
表格1:
Id
Desc
Mex
表2:
Id
IdTab1
Desc
视图选择 Table1 中的所有内容,左连接到 Id 上的 Table2 - IdTab1
现在我有一个与 Table2 连接的表 3,它具有以下字段:
表3:
Id
IdTab2
Code (VarChar(3))
我想在视图的选择中有一个新字段 Code 包含表 3 中的每个代码,并与 char ' ' 连接,而不更改从旧查询显示的记录(就像通过 concat 进行分组一样)每个匹配的代码加入。
我看到了其他一些帖子,但他们都没有使用这种方法。例如使用这个:
declare @result varchar(500)
set @result = ''
select @result = @result + ModuleValue + ', '
from TableX where ModuleId = @ModuleId
但是我遇到了两个问题。我无法在视图中使用声明(可能是因为语法错误),而且我必须按此分组,但我不知道如何。
示例结果基本视图
ID | IDTAB2 | DESC1 | DESC2 | MEX
1 | 2 | aa | bb | 4
2 | 1 | ab | cc | 2
2 | 2 | bb | bc | 2
示例结果加入表 3
ID | IDTAB2 | DESC1 | DESC2 | MEX | CODE
1 | 2 | aa | bb | 4 | CS
1 | 2 | aa | bb | 4 | NN
2 | 1 | ab | cc | 2 | AF
2 | 2 | bb | bc | 2 | DC
2 | 2 | bb | bc | 2 | KK
2 | 2 | bb | bc | 2 | JD
需要示例结果
ID | IDTAB2 | DESC1 | DESC2 | MEX | CODENEW
1 | 2 | aa | bb | 4 | CS NN
2 | 1 | ab | cc | 2 | AF
2 | 2 | bb | bc | 2 | DC KK JD
解决方案
考虑到“示例结果加入 Table3 ”的输出,您可以根据您的 SQL 服务器版本尝试以下选项 -
对于 MSSQL-2016 及更早版本 -演示
SELECT DISTINCT A.ID,A.IDTAB2,A.DESC1,A.DESC2,A.MEX,
SUBSTRING(
(
SELECT ' '+ B.CODE AS [text()]
FROM your_table B
WHERE B.ID = A.ID
AND B.IDTAB2 = A.IDTAB2
AND B.DESC1 = A.DESC1
AND B.DESC2 = A.DESC2
AND B.MEX = A.MEX
ORDER BY B.ID,B.IDTAB2,B.DESC1,B.DESC2,B.MEX
FOR XML PATH ('')
), 2, 1000) [C_Name]
FROM your_table A
对于 MSSQL-2017 或更新版本 -演示
SELECT ID,IDTAB2,DESC1,DESC2,MEX,
STRING_AGG ( CODE, ' ' )
FROM your_table
GROUP BY ID,IDTAB2,DESC1,DESC2,MEX
推荐阅读
- apache-kafka - 模式注册表失败时的问题 - Apache Kafka
- c# - 硒悬停在下拉标签上
- java - Lombok - 值可能尚未初始化
- java - 如何使用 tools.jar 编译方法打印 java 编译器错误日志?
- r - 为什么编织 pdf_document 需要很长时间?
- python - 从字典中删除空元素
- android - React Native Android 中的 AAB Bundle Size 太大
- kubernetes - Pod 是否使用 k8s API 服务器来获取规范声明?
- javascript - 如何从弹出窗口中获取复选框值以使其更改页面的 CSS?
- c++ - 多态向量 C++ – 没有匹配的成员函数来调用“比较”