请告知如何使用SQL Server 2005将两个结果合并为一个。
我的情况是Account
最多可以有两个Settlement Instructions
,并且已经建模如下:
纤细的模式:
Account
---------------------
Id
AccountName
PrimarySettlementId (nullable)
AlternateSettlementId (nullable)
SettlementInstruction
----------------------
Id
Name
我想要的输出是一个single result set
,带有一个select语句,这将允许我在Spring行映射器中构造一些java对象:
select
Account.Id as accountId,
Account.AccountName as accountName,
s1.Id as primarySettlementId,
s1.Name as primarySettlementName,
s2.Id as alternateSettlementId,
s2.Name as alternateSettlementName
我尝试了各种各样的东西,但找不到将结果集合并到主要和备用FK不为空的结果集的方法。
最后我搜索了论坛,但似乎没有什么能够满足我的需要。
答案 0 :(得分:6)
您需要外部联接。
select
Account.Id as accountId,
Account.AccountName as accountName,
s1.Id as primarySettlementId,
s1.Name as primarySettlementName,
s2.Id as alternateSettlementId,
s2.Name as alternateSettlementName
from Account
left join SettlementInstruction s1 ON s1.Id = Account.PrimarySettlementId
left join SettlementInstruction s2 ON s2.Id = Account.SecondarySettlementId
where /* ... */
答案 1 :(得分:1)
您可以尝试以下方式:
SELECT
a.Id as accountId,
a.AccountName as accountName,
'Primary' as Settlementtype
s1.Name as primarySettlementName,
FROM
Account a
INNER JOIN
SettlementInstruction s1 ON a.PrimarySettlementId = s1.Id
UNION
SELECT
a.Id as accountId,
a.AccountName as accountName,
'Alternate' as Settlementtype
s2.Name as 'AlternateName',
FROM
Account a
INNER JOIN
SettlementInstruction s2 ON a.AlternateSettlementId = s2.Id
这对你有用吗?
这会为您提供帐户具有PrimarySettlementId的所有帐户/结算说明的列表,然后是备用号不为空的第二个帐户/结算列表。两个都为NULL的那些将被省略。某些Account
实例可能重复(如果两个ID字段都有效且不为空)。
或者如果没有:你究竟想要什么?