查询中的单个SQL Server结果集

时间:2010-06-01 17:14:59

标签: sql sql-server sql-server-2005

请告知如何使用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不为空的结果集的方法。

最后我搜索了论坛,但似乎没有什么能够满足我的需要。

2 个答案:

答案 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字段都有效且不为空)。

或者如果没有:你究竟想要什么?