Один набор результатов SQL Server из запроса - PullRequest
2 голосов
/ 01 июня 2010

Посоветуйте, пожалуйста, как объединить два результата в один, используя SQL Server 2005.

У меня есть ситуация, когда Account может иметь до двух Settlement Instructions, и это было смоделировано так:

Уменьшенная схема:

Account
---------------------
Id
AccountName
PrimarySettlementId (nullable)
AlternateSettlementId (nullable)


SettlementInstruction
----------------------
Id
Name

Вывод, который я хочу получить, - это single result set с оператором select, похожим на этот, что позволит мне построить некоторые объекты Java в моем преобразователе строк Spring:

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 ]

6 голосов
/ 01 июня 2010

Вам необходимо внешнее соединение .

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 голос
/ 01 июня 2010

Вы можете попробовать что-то вроде:

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 являются действительными и не равны NULL).

Или, если нет: что именно вы ищете ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...