Суммирование значений отдельных столбцов SQL - PullRequest
0 голосов
/ 25 марта 2020

Я новичок в SQL и пытаюсь написать код, который просматривает каждый элемент в столбце и возвращает столбец с суммой каждого элемента в этом исходном столбце. Пример показан ниже.

----------------------------------------------------------
|  Company  |  Payment Type  |  Price      |  PriceType  |
----------------------------------------------------------
|  A        |  Debit         |  100        |  CopyCost   |
----------------------------------------------------------
|  B        |  Cash          |  10         |  FullPrice  |
----------------------------------------------------------
|  C        |  Debit         |  50         |  CopyCost   |
----------------------------------------------------------
|  D        |  Cash          |  20         |  CopyCost   |
----------------------------------------------------------

Возвращает:

|  Paymen Type  |  ItemCount  |  TotalPrice  |
------------------------------------------
|  Debit        |  2          |  150         |
------------------------------------------
|  Cash         |  2          |  30          |
------------------------------------------

Я написал скрипт, который выполняет аналогичную функцию, но имеет две проблемы.

SELECT [Payment Type], 
       COUNT(*) ItemCount,
       SUM(CASE WHEN [Payment Type] = 'Debit' THEN [Price] ELSE 0 END) TotalPrice,
       SUM(CASE WHEN [Company Name] = 'Cash' THEN [Price] ELSE 0 END) TotalPrice
  FROM [TableName]
  GROUP BY [Payment Type]

Первая проблема заключается в том, что создается новый столбец с тем же именем (показано ниже).

|  OrderId  |  ItemCount  |  TotalPrice  |  TotalPrice  |
---------------------------------------------------------
|  Debit    |  2          |  150         |  0           |
---------------------------------------------------------
|  Cash     |  2          |  0           |  30          |
---------------------------------------------------------

Вторая проблема заключается в том, что мне приходится вручную вводить имя каждого уникального элемента в столбце, но база данных слишком велика, чтобы этот параметр был осуществим. Любые предложения будут высоко оценены!

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Я нашел ответ на случай, если кто-нибудь столкнется с этой проблемой:

SELECT [Payment Type], 
       COUNT(*) ItemCount,
       SUM(CASE WHEN [Payment Type] = [Payment Type] THEN [Price] ELSE 0 END) TotalPrice
  FROM [TableName]
  GROUP BY [Payment Type]
0 голосов
/ 25 марта 2020

Похоже, вы хотите простую агрегацию:

select payment_type, count(*) item_count, sum(price) total_price
from mytable
group by payment_type
...