Как суммировать два результата в SQL-запросе и суммировать результаты в другой таблице? - PullRequest
0 голосов
/ 08 апреля 2019

Я хочу суммировать два результата из моего sql-запроса, и результат суммы будет снова использован для суммирования второго sql-запроса

SQL SERVER

ПЕРВЫЙ ЗАПРОС СЕРВЕРА SQL

SELECT  b.paytype, CONVERT(nvarchar, CAST(SUM(b.principal) AS money), 1) as 'Cash Sales'
FROM fin_tbl_crjhead  a 
INNER JOIN fin_tbl_crjlot b 
    ON a.uid = b.headuid
left JOIN fin_tbl_crjsundries c ON b.headuid = c.uid
WHERE a.ordate BETWEEN '2018-12-01' AND '2018-12-31'
  AND a.brcode = '010'
GROUP BY b.paytype
ORDER BY b.paytype ASC

Я получил правильные результаты, но не могу суммировать два результата:

enter image description here

Второй запрос SQL Server

SELECT SUM(a.credit)
  FROM [TFINANCE].[dbo].[fin_tbl_crjsundries] a INNER JOIN fin_tbl_crjlot b 
on a.headuid = b.headuid INNER JOIN fin_tbl_crjhead c ON c.uid = b.headuid
  where a.acctcode = '100 200-02' and a.brcode = '010' and c.ordate
 between '2018-12-01' and '2018-12-31'

Результат второго запроса 2783.07 Теперь я хочу добавить fp + рассрочка + 2783.07

Ответы [ 3 ]

0 голосов
/ 08 апреля 2019

// Вы можете попробовать это.

SELECT  b.paytype, CONVERT(nvarchar, CAST(SUM(b.principal) AS money), 1) as Cash_sale
into #tblfirstsum FROM fin_tbl_crjhead  a 
INNER JOIN fin_tbl_crjlot b 
    ON a.uid = b.headuid
left JOIN fin_tbl_crjsundries c ON b.headuid = c.uid
WHERE a.ordate BETWEEN '2018-12-01' AND '2018-12-31'
  AND a.brcode = '010'
GROUP BY b.paytype
ORDER BY b.paytype ASC

// Второй запрос

SELECT SUM(a.credit) as credit
 into #tblsecondSum FROM [TFINANCE].[dbo].[fin_tbl_crjsundries] a INNER JOIN fin_tbl_crjlot b 
on a.headuid = b.headuid INNER JOIN fin_tbl_crjhead c ON c.uid = b.headuid
  where a.acctcode = '100 200-02' and a.brcode = '010' and c.ordate
 between '2018-12-01' and '2018-12-31'


Create table #tblFinal(paytype nvarchar(100),Total_Sum double(18,6))
insert into #tblFinal (paytype,Total_Sum)
select paytype,Cash_sale from #tblfirstsum where paytype='fp' union all
select paytype,Cash_sale from #tblfirstsum where paytype='installment' union all
select 'Credit Amount',credit from #tblsecondSum

select paytype,Total_Sum from #tblFinal 
select Total=Sum(Total_Sum) from #tblFinal 
0 голосов
/ 08 апреля 2019

Вы можете попробовать использовать UNION и SUM из подзапроса, как показано ниже.

SELECT SUM(COALESCE([Cash Sales],0)) FROM 
 (
  SELECT  b.paytype AS paytype, CONVERT(nvarchar, CAST(SUM(b.principal) AS money), 1) 
  as [Cash Sales]
  FROM fin_tbl_crjhead  a 
  INNER JOIN fin_tbl_crjlot b 
  ON a.uid = b.headuid
  left JOIN fin_tbl_crjsundries c ON b.headuid = c.uid
  WHERE a.ordate BETWEEN '2018-12-01' AND '2018-12-31'
   AND a.brcode = '010'
  GROUP BY b.paytype

  UNION

  SELECT 'credit' AS paytype, SUM(a.credit) AS [Cash Sales]
  FROM [TFINANCE].[dbo].[fin_tbl_crjsundries] a INNER JOIN fin_tbl_crjlot b 
  on a.headuid = b.headuid INNER JOIN fin_tbl_crjhead c ON c.uid = b.headuid
  where a.acctcode = '100 200-02' and a.brcode = '010' and c.ordate
  between '2018-12-01' and '2018-12-31') S
WHERE S.paytype IN  ('fp', 'installment', 'credit')
0 голосов
/ 08 апреля 2019
SELECT Sum( CASE WHEN paytype IN ('fp', 'installment') THEN b.principal ELSE 0 
       END ) 
       + (SELECT Sum(a.credit) 
          FROM   [TFINANCE].[dbo].[fin_tbl_crjsundries] a 
                 INNER JOIN fin_tbl_crjlot b 
                         ON a.headuid = b.headuid 
                 INNER JOIN fin_tbl_crjhead c 
                         ON c.uid = b.headuid 
          WHERE  a.acctcode = '100 200-02' 
                 AND a.brcode = '010' 
                 AND c.ordate BETWEEN '2018-12-01' AND '2018-12-31') 
FROM   (SELECT b.paytype, 
               Cast(Sum(b.principal) AS MONEY) AS 'Cash Sales' 
        FROM   fin_tbl_crjhead a 
               INNER JOIN fin_tbl_crjlot b 
                       ON a.uid = b.headuid 
               LEFT JOIN fin_tbl_crjsundries c 
                      ON b.headuid = c.uid 
        WHERE  a.ordate BETWEEN '2018-12-01' AND '2018-12-31' 
               AND a.brcode = '010' 
        GROUP  BY b.paytype 
        ORDER  BY b.paytype ASC)tbl1 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...