Встроенные столбцы SUM с использованием GROUP BY - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть следующая таблица в Access:

ID  |   Name  |  Dog    |   Cat   |
===================================
1   | A       |   100   |   0     |
1   | B       |   0     |   100   |
1   | C       |   50    |   0     |
2   | A       |   100   |   0     |
2   | B       |   3     |   100   |
2   | C       |   3     |   50    |

По запросу мне нужно, чтобы это было показано так:

ID  |   Name  |  Dog    |   Cat   |
===================================
1   | A       |   100   |   0     |
1   | B       |   0     |   100   |
1   | C       |   50    |   0     |
1   | TOTAL   |   50    |   0     |
2   | A       |   100   |   0     |
2   | B       |   0     |   100   |
2   | C       |   0     |   50    |
2   | TOTAL   |   0     |   -50   |

Как видите, сначала я суммируюстолбцы Dog и Cat, после этого я суммирую Dog - Cat, если это положительное значение переходит в столбец Dog, если отрицательное - в столбец Cat.Я новичок в этом, я проверял подобные вопросы, но я хотел бы увидеть самый простой способ справиться с этим.Спасибо!

На данный момент у меня есть:

SELECT ID, Name, Dog, Cat
FROM Table
UNION 
SELECT ID, 'Total', SUM(Dog), SUM(Cat)
FROM Table
GROUP BY ID

И у меня есть это:

ID  |   Name  |  Sum(Dog)|   Sum(Cat)|
======================================
1   | A       |   100    |   0       |
1   | B       |   0      |   100     |
1   | C       |   50     |   0       |
1   | TOTAL   |   150    |   100     |
2   | A       |   100    |   0       |
2   | B       |   0      |   100     |
2   | C       |   0      |   50      |
2   | TOTAL   |   100    |   150     |

1 Ответ

0 голосов
/ 20 сентября 2018

Вы бы использовали union all и order by.В MS Access, я думаю, это будет:

SELECT ID, Name, SUM(Dog), Sum(Cat)
FROM Table
GROUP BY ID, Name
UNION ALL
SELECT ID, "Total", SUM(Dog), Sum(Cat)
FROM Table
GROUP BY ID
ORDER BY IIF(Name = "Total", 1, 0), Name

Вы можете попробовать это с помощью подзапроса:

SELECT name, name, num_dogs, num_cats
FROM (SELECT ID, Name, SUM(Dog) as num_dogs, Sum(Cat) as num_cats, 1 as ord
      FROM Table
      GROUP BY ID, Name
      UNION ALL
      SELECT ID, "Total", SUM(Dog), Sum(Cat), 0 as ord
      FROM Table
      GROUP BY ID
     ) as t
ORDER BY ord, Name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...