按 Y 分组的每个 X 的值总和
Sum of value per X grouped by Y
declare @table table (Customer char(1), Transaction char(3), Discount float);
insert into @table values
('A', '001', '10.1'),
('A', '001', '10.1'),
('A', '002', '20.2'),
('B', '003', '30.3'),
('B', '004', '40.4')
我正在尝试做这样的事情:
SELECT Customer, (SELECT SUM(Discount) WHERE Transaction IS DISTINCT)
FROM @table
GROUP BY Customer
结果应该是这样的:
Customer Total Discount
--------------------------
A 30.3
B 70.7
所以基本上我需要为每笔交易的每个客户提供所有折扣,因为它们有时会在我的数据中重复。
您可以使用子查询只获取所有不同的行;
SELECT Customer, SUM(Discount) as Total_Discount FROM
(
SELECT DISTINCT Customer, Transaction, Discount FROM @table
) x
group by Customer
回答你的问题;如果出现相同客户、相同交易但折扣不同的情况,您必须决定是将其完全视为不同的交易,还是仅获得最高折扣或最低折扣。
获得最高折扣,
SELECT Customer, SUM(Discount) as Total_Discount FROM
(
SELECT Customer, Transaction, MAX(Discount) as Discount FROM @table
GROUP BY Customer, Transaction
) x
group by Customer
获得最低折扣
SELECT Customer, SUM(Discount) as Total_Discount FROM
(
SELECT Customer, Transaction, MIN(Discount) as Discount FROM @table
GROUP BY Customer, Transaction
) x
group by Customer
如果您打算将其视为完全不同的交易(这意味着它也会被添加到总数中);无需进一步更改代码。
首先根据 3 columns.Then 从您的临时工中获取 DISTINCT 值 columns.Then 基于 GROUP BY Customer
的 SUM 折扣值
SELECT A.Customer, SUM(A.Discount) as Total_Discount
FROM
(
SELECT DISTINCT Customer, Transaction, Discount FROM @table
) A
GROUP BY A.Customer
使用行号
SELECT Customer
,sum(Discount) as Total_Discount
FROM (
SELECT Customer
,[Transaction]
,Discount
,row_number() OVER (
PARTITION BY Customer
,[Transaction] ORDER BY Discount
) AS rn
FROM @table
) t
WHERE rn = 1
GROUP BY Customer
通过内联查询从 table 获取不同记录并命名为 "Inline",然后从 "Inline" 获得 select 客户和总折扣 Like
SELECT Inline.Customer,
SUM(Inline.[Discount]) FROM
(SELECT DISTINCT Customer,[Discount] FROM @table) Inline
GROUP BY Inline.Customer
declare @table table (Customer char(1), Transaction char(3), Discount float);
insert into @table values
('A', '001', '10.1'),
('A', '001', '10.1'),
('A', '002', '20.2'),
('B', '003', '30.3'),
('B', '004', '40.4')
我正在尝试做这样的事情:
SELECT Customer, (SELECT SUM(Discount) WHERE Transaction IS DISTINCT)
FROM @table
GROUP BY Customer
结果应该是这样的:
Customer Total Discount
--------------------------
A 30.3
B 70.7
所以基本上我需要为每笔交易的每个客户提供所有折扣,因为它们有时会在我的数据中重复。
您可以使用子查询只获取所有不同的行;
SELECT Customer, SUM(Discount) as Total_Discount FROM
(
SELECT DISTINCT Customer, Transaction, Discount FROM @table
) x
group by Customer
回答你的问题;如果出现相同客户、相同交易但折扣不同的情况,您必须决定是将其完全视为不同的交易,还是仅获得最高折扣或最低折扣。
获得最高折扣,
SELECT Customer, SUM(Discount) as Total_Discount FROM
(
SELECT Customer, Transaction, MAX(Discount) as Discount FROM @table
GROUP BY Customer, Transaction
) x
group by Customer
获得最低折扣
SELECT Customer, SUM(Discount) as Total_Discount FROM
(
SELECT Customer, Transaction, MIN(Discount) as Discount FROM @table
GROUP BY Customer, Transaction
) x
group by Customer
如果您打算将其视为完全不同的交易(这意味着它也会被添加到总数中);无需进一步更改代码。
首先根据 3 columns.Then 从您的临时工中获取 DISTINCT 值 columns.Then 基于 GROUP BY Customer
的 SUM 折扣值 SELECT A.Customer, SUM(A.Discount) as Total_Discount
FROM
(
SELECT DISTINCT Customer, Transaction, Discount FROM @table
) A
GROUP BY A.Customer
使用行号
SELECT Customer
,sum(Discount) as Total_Discount
FROM (
SELECT Customer
,[Transaction]
,Discount
,row_number() OVER (
PARTITION BY Customer
,[Transaction] ORDER BY Discount
) AS rn
FROM @table
) t
WHERE rn = 1
GROUP BY Customer
通过内联查询从 table 获取不同记录并命名为 "Inline",然后从 "Inline" 获得 select 客户和总折扣 Like
SELECT Inline.Customer,
SUM(Inline.[Discount]) FROM
(SELECT DISTINCT Customer,[Discount] FROM @table) Inline
GROUP BY Inline.Customer