例如,我有下面的数据,我正在尝试根据特定条件连接:
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的逻辑,并使它们保持在各自的行中?
1条答案
按热度按时间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