如何连接多行的结果

xqk2d5yq  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(306)

我目前在sql server中有一个视图,如下所示:
表1:

Id
Desc
Mex

表2:

Id
IdTab1
Desc

视图select everything from table1 left joined on table2 on id-idtab1
现在我有一个表3和表2,它们有如下字段:
表3:

Id
IdTab2
Code (VarChar(3))

我希望在视图的select中有一个新的字段代码,它包含表3中用字符“”连接的每一个代码,而不更改旧查询中显示的记录(就像按concat进行分组一样)与联接匹配的每一个代码。
我看到一些其他的帖子,但他们都没有使用这种方法。例如,使用:

declare @result varchar(500)
set @result = ''
select @result = @result + ModuleValue + ', ' 
from TableX where ModuleId = @ModuleId

但我面临两个问题。我不能在视图中使用declare(可能是因为语法错误),而且我必须按分组,我不知道如何使用。
示例结果基本视图

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
8tntrjer

8tntrjer1#

考虑到“example result joined table3”的输出,您可以根据您的sql server版本尝试下面的选项-
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

相关问题