2列でグループ化し、すべての行に総計を表示する
以下はリストデータです。
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
してみてください:
SELECT
Code,
SUM(ItemCount) ItemCount,
Type,
SUM(Amount) Amount
FROM
YourTable
GROUP BY Code, Type
ORDER BY Code
これは宿題のように見えます。
(最初に質問を見たときにこれが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の場合、識別子はバックティックで囲まれます。
この簡単なソリューションを試すことができます:
select Code,sum(ItemCount),Type,sum(Amount) from table group by code,type
「グループ化」を理解すると便利になります
このクエリを試すことができます:
SELECT Code,SUM(ItemCount) AS ItemCount,Type,SUM(Amount) AS Amount
FROM
table
GROUP BY Code, Type
これにより、適切な結果が得られます。 Code
ではなく、Type
およびItemCount
でグループ化する必要があります。
提供する金額はサンプルデータとは異なりますが、これはサンプルデータ値に対しては機能します。
SELECT Code, SUM(ItemCount) AS ItemCount, [Type], SUM(Amount) AS Amount
FROM dbo.TestSubs GROUP BY Code,[Type] ORDER BY Code
各行の実際の合計がアイテム数と金額の積であるという私の理解が正しい場合、以下のコードを使用できます。 @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