如何根据大小写表达式将列连接成一行?

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

例如,我有下面的数据,我正在尝试根据特定条件连接:

ID      Amount       Account           Date
-----------------------------------------------
1        6000         G500           2-20-2020
1        6000         D800           2-20-2020
2        50           A950           8-20-2019
2        50           H650           8-20-2019

例如,基于上面的数据,应用程序中id 1下的事务位于同一个事务记录下,因此在本例中,我使用下面的代码来连接。
我可以用它将它们连接成一行,现在结果显示在下面的代码中:

SELECT 
    STUFF((SELECT ', ' + Account FROM acct a 
           WHERE a.ID = b.ID AND a.Date = b.Date
           FOR XML PATH('')), 1, 1, '') Account
FROM 
    acct b

输出:

ID    Amount     PaidIntoAccount       Date
------------------------------------------------
1      6000        G500, D800        2-20-2020

这对于上面的场景很好,但是对于id 2,我不想串联它们,而是在上面的语句中添加一个条件,使id 2看起来像这样:

ID      Amount       Account            Date
----------------------------------------------
2        50           A950           8-20-2019
2        50           H650           8-20-2019

目前使用上面的代码,它连接id 2,并使其看起来像下面这样,这是错误的,我需要它看起来像上面的:

ID      Amount         Account                Date
----------------------------------------------------
2        50           H650, A950           8-20-2019
2        50           H650, A950           8-20-2019

这是因为在应用程序中,id 1的两个事务在同一个事务页下,因此它们是一个事务,但只有两个不同的帐号,所以我将它们连接起来。而对于ID2,在应用程序中它们是两个独立的事务,但仍然具有相同的id和日期,因此这些事务仍然需要显示在各自的行上,而不是串联起来。我在上面输入的查询将连接两者。在本例中,我将如何包含不连接id 2的逻辑,并使它们保持在各自的行中?

fnx2tebb

fnx2tebb1#

你把它们分成两个独立的结果集 UNION ALL ```
SELECT id,amount, date,
STUFF((SELECT ', ' + Account FROM acct a
WHERE a.ID = b.ID AND a.Date = b.Date
FOR XML PATH('')), 1, 1, '') as PaidIntoAccount
FROM
acct AS b
group by id,account, date
WHERE id = 1
UNION ALL
SELECt ID, Amount, Date, Account
From acct as b
WHERE id = 2

相关问题