Группировать по двум столбцам и отображать общее количество в каждой строке

Ниже приведены данные списка.

Code   ItemCount   Type      Amount 
----------------------------------------
B001    1          Dell         10.00
B001    1          Dell         10.00
B001    1          Apple        10.00
B001    2          Apple        20.00
B001    2          Apple        20.00
B114    1          Apple        30.50
B114    1          Apple        10.00

Мне нужен результат для группировки по коду и по типу и сумме ItemCount и получить общее количество Amount в каждой строке.

Возможно ли это?

Code   ItemCount    Type      Amount 
----------------------------------------
B001    2          Dell          20.00
B001    5          Apple         50.00
B114    2          Apple         40.50 

Ответы

Ответ 1

Попробуйте:

SELECT
    Code,
    SUM(ItemCount) ItemCount,
    Type,
    SUM(Amount) Amount
FROM
    YourTable
GROUP BY Code, Type
ORDER BY Code

Ответ 2

Это выглядит как домашнее задание.

(Клянусь, я подумал, что это было помечено как MySQL, когда я впервые посмотрел на вопрос, но в заголовке четко отображается MS SQL)

Для MySQL этот запрос вернет указанный набор результатов:

SELECT t.Code
     , SUM(t.ItemCount) AS ItemCount
     , t.Type
     , s.Amount AS Amount
  FROM mytable t
 CROSS
  JOIN ( SELECT SUM(r.Amount) AS Amount
           FROM mytable r
       ) s 
 GROUP
    BY t.Code
     , t.Type
 ORDER BY t.Code ASC, t.Type DESC

Для других баз данных удалите для MySQL обратные ссылки вокруг псевдонимов столбцов.

Если вам нужно сохранить регистр, для Oracle идентификаторы заключены в двойные кавычки. Для SQL Server идентификаторы заключены в квадратные скобки. Для идентификаторов MySQL заключены в обратные ссылки.

Ответ 3

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

SELECT Code,SUM(ItemCount) AS ItemCount,Type,SUM(Amount) AS Amount
FROM
    table
GROUP BY Code, Type

Это даст вам правильный результат. Вам нужно группировать Code и Type, а не ItemCount

Ответ 4

Вы можете попробовать это более простое решение:

select Code,sum(ItemCount),Type,sum(Amount) from table group by code,type

Понимание "группы по" пригодится

Ответ 5

Суммы, которые вы даете, отличаются от данных образца, но это работает для значений данных образца:

SELECT Code, SUM(ItemCount) AS ItemCount, [Type], SUM(Amount) AS Amount 
FROM dbo.TestSubs GROUP BY Code,[Type] ORDER BY Code

Ответ 6

Если мое понимание верное, что фактическое общее количество каждой строки является продуктом элемента и суммы, то вы можете использовать приведенный ниже код. Если не использовать код @Abu.

;WITH cte AS
(
    SELECT Code, ItemCount, Type, Amount, ItemCount * Amount AS TotalAmount FROM <Table>
)
SELECT 
    Code,
    SUM(ItemCount),
    Type,
    SUM(TotalAmount)
FROM cte
GROUP BY Code, Type