2015-03-14 11 views
-1

После обновления запроса я получил следующий вывод с этим запросомКак присоединиться к столу?

Я пишу следующий запрос, чтобы поставить два набора записей рядом друг с другом.

WITH cte AS 
    (SELECT SubSubsidaryAccountCode, 
      sum(Debit) AS debit, 
      sum(Credit) AS credit, 
      ROW_NUMBER() over (PARTITION BY SubSubsidaryAccountCode 
          ORDER BY SubSubsidaryAccountCode) AS RN 
    FROM TBLLedgerLevel4 
    WHERE SubSubsidaryAccountCode LIKE '4%' 
    OR SubSubsidaryAccountCode LIKE '5%' 
    GROUP BY SubSubsidaryAccountCode), 
    cte2 AS 
    (SELECT * 
    FROM TBLLevel4) 
SELECT a.SubSubsidaryAccountCode , 
     c.SubSubsidaryAccountName AS RevenuName , 
     sum(a.Debit) AS debit , 
     b.SubSubsidaryAccountCode AS SubsidaryAccount2 , 
     d.SubSubsidaryAccountName AS ExpenseName , 
     sum(b.Credit) AS credit 
FROM cte a 
JOIN cte2 c ON a.SubSubsidaryAccountCode = c.SubSubsidaryAccountCode 
FULL JOIN cte b ON a.RN = b.RN 
JOIN cte2 d ON b.SubSubsidaryAccountCode=d.SubSubsidaryAccountCode 
WHERE a.SubSubsidaryAccountCode LIKE '4%' 
    AND b.SubSubsidaryAccountCode LIKE '5%' 
GROUP BY a.SubSubsidaryAccountCode, 
     b.SubSubsidaryAccountCode, 
     c.SubSubsidaryAccountName, 
     d.SubSubsidaryAccountName 

Выход:

SubSubsidaryAccountCode RevenuName debit SubsidaryAccount2 ExpenseName credit 
    4-106-1001-10026  Cash Sale 52889 5-105-1005-10011 Rf Battles 18091289 
    4-108-1012-10037  New Sale1 1000  5-105-1005-10011 Rf Battles 18091289 

приведенный выше вывод содержит записи в отношении двух бухгалтерских кодов, которые начинаются с 4 и 5 .Теперь записи против учета кода, которые начинаются с учета кода, как 4 заполняются и соответствуют желаемым результатам, но вторая строка записи, начинающаяся с кода учета 5, не имеет значения и должна иметь нулевое значение в ней. Пожалуйста, помогите мне решить эту проблему.

+0

Во-первых, вы должны решить, какую базу данных вы используете. , , SQL Server или MySQL? –

+0

@GordonLinoff sql server –

+0

Я удалил тег моего sql –

ответ

2

Ваш выбор показывает, что это произвольно, какие из них заполнены и которые являются NULL, например, вы просто хотите поставить два набора записей рядом друг с другом. Вы можете сделать это путем добавления ROW_NUMBER() и использования, что в LEFT JOIN:

;with cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY MainAccountID ORDER BY LedgerDate) AS RN 
       FROM TBLLedgerLevel1 
      ) 
    SELECT a.LedgerDate 
      , a.MainAccountId 
      , a.VoucherCode 
      , a.Debit 
      , b.LedgerDate AS Date2 
      , b.MainAccountId AS MainAccount2 
      , b.VoucherCode AS VoucherCode2 
      , b.Credit 
     FROM cte a 
     LEFT JOIN cte b 
     ON a.RN = b.RN 
     and b.MainAccountId='5' 
     WHERE a.MainAccountId='4' 

Если может быть больше MainAccountId='5' записей, чем MainAccountId='4' вы, вероятно, хотите FULL JOIN и может использовать COALESCE() выбрать, какое поле для отображения. Также, на мой взгляд, использование псевдонимов значительно улучшает код.

Обновление: Не уверен, что именно на это, но, чтобы добавить имя вам нужно добавить JOIN к TBLLevel1, что-то вроде:

;with cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY MainAccountID ORDER BY LedgerDate) AS RN 
       FROM TBLLedgerLevel1 
      ) 
    SELECT a.LedgerDate 
      , a.MainAccountId 
      , a.VoucherCode 
      , a.Debit 
      , b.LedgerDate AS Date2 
      , b.MainAccountId AS MainAccount2 
      , b.VoucherCode AS VoucherCode2 
      , b.Credit 
       , c.MainAccountName 
     FROM cte a 
     JOIN TBLLevel1 c 
     ON a.MainAccountID = c.ID 
     LEFT JOIN cte b 
     ON a.RN = b.RN 
     and b.MainAccountId='5' 
     WHERE a.MainAccountId='4' 

Если есть больше чем 1 запись на MainAccountId в TBLLevel1 таблице вам нужно добавить критерии к JOIN, чтобы убедиться, что включено только правильное значение.

+0

Thank вы так много! он работает :) –

+0

вы можете помочь мне получить мою основную учетную запись Имя от TBLLevel1 как mainAccountId = 4 имеет MainAccountName = доход. Как я могу получить эту информацию, используя указанный выше запрос? –

+0

Вы должны иметь возможность просто добавить поле в список «SELECT», из вашего вопроса, из которого будет получено собственное имя, не ясно, могут потребоваться некоторые примеры данных. –

Смежные вопросы