web-dev-qa-db-fra.com

Regroupez par deux colonnes et affichez le total général dans chaque ligne

Voici les données de la liste.

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

J'ai besoin d'un résultat pour regrouper par code et par type et totaliser le ItemCount et obtenir le grand total du Amount dans chaque ligne.

Est-ce possible?

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

S'il vous plaît essayez:

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

Cela ressemble à des devoirs.

(Je jure que je pensais que cela était étiqueté comme MySQL lorsque j'ai regardé la question pour la première fois, mais le titre montre clairement MS SQL)

Pour MySQL, cette requête renverra le jeu de résultats spécifié:

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

Pour les autres bases de données, supprimez pour MySQL les backticks des alias de colonne.

Si vous devez conserver la casse, pour Oracle, les identifiants sont placés entre guillemets. Pour SQL Server, les identificateurs sont placés entre crochets. Pour MySQL, les identifiants sont placés entre guillemets.

4
spencer7593

Vous pouvez essayer cette solution plus simple:

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

Comprendre le "regroupement" serait utile

2
Pooja smithi

Vous pouvez essayer cette requête:

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

Cela vous donnera un résultat correct. Vous devez regrouper par Code et Type et non ItemCount

1
Abubakkar

Les montants que vous donnez diffèrent des exemples de données, mais cela fonctionne pour les valeurs des exemples de données:

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

Si je comprends bien que le total réel de chaque ligne est le produit du nombre d'articles et du montant, vous pouvez utiliser le code ci-dessous. Sinon, utilisez le code de @ 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
0
hallie