я хочу выбрать как совпадающие, так и не совпадающие обе строки из 2 таблиц - PullRequest
0 голосов
/ 03 декабря 2018

Я написал этот запрос, чтобы выбрать совпадающие и не совпадающие обе строки из таблицы начального баланса, а также из таблицы gernalledger, но он показывает только совпадающие строки в двух таблицах, я хочу выбрать все строки из таблицы начального баланса, `

SELECT   GL.AccountId,Ca.Code as Code,CA.AccountName as AccountName,
         SUM(CASE GL.DrCr WHEN 2 THEN ISNULL(Amount,0) END) AS Debit,
         SUM(CASE GL.DrCr WHEN 1 THEN ISNULL(Amount,0) END) AS Credit,
         SUM(CASE o.DrOrCr WHEN 2 THEN ISNULL(o.Balance,0) END) AS OpeningDebit,
         SUM(CASE o.DrOrCr WHEN 1 THEN ISNULL(o.Balance,0) END) AS OpeningCredit
FROM     GeneralLedgerLine GL 
Join ClientAccount CA On GL.AccountId = CA.Id
Left Join OpeningBalance o on o.AccountId=CA.Id
Where CA.ClientId = 1

GROUP BY GL.AccountId,CA.Code,CA.AccountName

`OpeningBalanceTable

Output

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Попробуйте это:

Full Outer Join OpeningBalance o on o.AccountId=CA.Id
0 голосов
/ 03 декабря 2018

Если вы хотите извлечь данные из обеих таблиц, используйте FULL OUTER JOIN вместо LEFT JOIN в вашем запросе, как показано ниже,

Также объедините таблицу OpeningBalance для o.AccountId с GL.AccountId в таблице GeneralLedgerLine

SELECT   GL.AccountId,Ca.Code as Code,CA.AccountName as AccountName,
         SUM(CASE GL.DrCr WHEN 2 THEN ISNULL(Amount,0) END) AS Debit,
         SUM(CASE GL.DrCr WHEN 1 THEN ISNULL(Amount,0) END) AS Credit,
         SUM(CASE o.DrOrCr WHEN 2 THEN ISNULL(o.Balance,0) END) AS OpeningDebit,
         SUM(CASE o.DrOrCr WHEN 1 THEN ISNULL(o.Balance,0) END) AS OpeningCredit
FROM     GeneralLedgerLine GL 
Join ClientAccount CA On GL.AccountId = CA.Id
FULL OUTER Join OpeningBalance o on o.AccountId=GL.AccountId
Where CA.ClientId = 1

GROUP BY GL.AccountId,CA.Code,CA.AccountName

Если вы хотите выбрать все строки из таблицы OpeningBalance, но не все строки из таблицы GeneralLedgerLine, тогда используйте RIGHT OUTER JOIN вместо LEFT JOIN в вашем запросе,

Также присоединяйтесьТаблица OpeningBalance для o.AccountId с GL.AccountId в таблице GeneralLedgerLine

SELECT   GL.AccountId,Ca.Code as Code,CA.AccountName as AccountName,
         SUM(CASE GL.DrCr WHEN 2 THEN ISNULL(Amount,0) END) AS Debit,
         SUM(CASE GL.DrCr WHEN 1 THEN ISNULL(Amount,0) END) AS Credit,
         SUM(CASE o.DrOrCr WHEN 2 THEN ISNULL(o.Balance,0) END) AS OpeningDebit,
         SUM(CASE o.DrOrCr WHEN 1 THEN ISNULL(o.Balance,0) END) AS OpeningCredit
FROM     GeneralLedgerLine GL 
Join ClientAccount CA On GL.AccountId = CA.Id
RIGHT OUTER Join OpeningBalance o on o.AccountId=GL.AccountId
Where CA.ClientId = 1

GROUP BY GL.AccountId,CA.Code,CA.AccountName
0 голосов
/ 03 декабря 2018

Вы можете использовать левое соединение для трех таблиц и перемещать CA.ClientId = 1 в предложении On вместо предложения Where

SELECT   GL.AccountId,Ca.Code as Code,CA.AccountName as AccountName,
         SUM(CASE GL.DrCr WHEN 2 THEN ISNULL(Amount,0) END) AS Debit,
         SUM(CASE GL.DrCr WHEN 1 THEN ISNULL(Amount,0) END) AS Credit,
         SUM(CASE o.DrOrCr WHEN 2 THEN ISNULL(o.Balance,0) END) AS OpeningDebit,
         SUM(CASE o.DrOrCr WHEN 1 THEN ISNULL(o.Balance,0) END) AS OpeningCredit
FROM     GeneralLedgerLine GL 
LEft Join ClientAccount CA On GL.AccountId = CA.Id
Left Join OpeningBalance o on o.AccountId=CA.Id
and CA.ClientId = 1

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