Сумма SQL от объединения - PullRequest
       7

Сумма SQL от объединения

0 голосов
/ 24 января 2019

У меня есть 2 таблицы, которые я объединяю, и я хотел бы суммировать значения вместо двух разных строк с одинаковым идентификатором. Вот что у меня сейчас есть:

SELECT
    d.ID,
    SUM(d.balance) AS Balance
FROM  
    d
WHERE 
    d.status != 'closed'
GROUP BY 
    d.ID

UNION ALL

SELECT
    t.ID,
    SUM(t.balance) AS Balance
FROM 
    t
WHERE 
    t.status != 'closed'
GROUP BY 
    t.ID

Это дает мне список со всеми значениями d, затем со всеми значениями t, я хотел бы, чтобы все строки с совпадающими идентификаторами были в одной строке

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Надеюсь, это поможет вам

  DECLARE @DataSource TABLE
(
    [id] INT
   ,[Balance] Float
   ,status Varchar(50)

);

INSERT INTO @DataSource ([ID], [Balance],[Status])
VALUES (1, 100 ,'Closed')
      ,(2, 200,'Open' )
      ,(3, 300 ,'Onhold')
      ,(4, 400 ,'Open')


DECLARE @DataSource1 TABLE
(
   [id] INT
   ,[Balance] Float
  ,status Varchar(50)

);


INSERT INTO @DataSource1 ([ID], [Balance],[Status])
VALUES (1, 3 ,'Open')
      ,(2, 3 ,'Open')
      ,(3, 55 ,'Onhold')
      ,(4, 6 ,'Closed')


      SELECT d.ID,sum((Case When d.status!='Closed' Then d.Balance Else 0 End )+(Case When t.status!='Closed' Then t.Balance Else 0 End))
      FROM @DataSource d
     inner Join  @DataSource1 t
     on t.ID= d.ID
     Group By  d.ID,  t.ID


enter code here
0 голосов
/ 24 января 2019

Поместите внешний запрос вокруг текущего запроса и снова сгруппируйте его следующим образом:

select id, sum(Balance)
from (
  SELECT d.ID, SUM(d.balance) AS Balance
  FROM d
  WHERE d.[status] != 'closed'
  GROUP BY d.ID

  UNION ALL

  SELECT t.ID, SUM(t.balance) AS Balance
  FROM t
  WHERE t.[status] != 'closed'
  GROUP BY t.ID
) X
group by id

на самом деле не нужны внутренние group by, поэтому следующее должно работать иуточнение:

select id, sum(Balance)
from (
  SELECT d.ID, d.balance
  FROM d
  WHERE d.[status] != 'closed'

  UNION ALL

  SELECT t.ID, t.balance
  FROM t
  WHERE t.[status] != 'closed'
) X
group by id
...