现在有一个表,如何求这个表的总和,相同的订单号其它费用只计算一次!!
比如
订单号 商品名称 价格 其它费用
001 a 1 1
001 b 2 1
001 c 5 1
001 d 2 1
002 a 1 2
002 b 2 2请001 和 002两个订单号的总金额是多少!!其中同一个订单号的[其它费用]只收一次!!比如001的其它费用是1元而不是四个商品加起来4的费用!!SUM=1+2+5+2+1+1+2+2这个是两个订单号的和,请问要SQL要怎么计算呢!!在同一个订单号只计算其它费用用1次就可以了!!
红色是商品的金额 其它是其它费用
比如
订单号 商品名称 价格 其它费用
001 a 1 1
001 b 2 1
001 c 5 1
001 d 2 1
002 a 1 2
002 b 2 2请001 和 002两个订单号的总金额是多少!!其中同一个订单号的[其它费用]只收一次!!比如001的其它费用是1元而不是四个商品加起来4的费用!!SUM=1+2+5+2+1+1+2+2这个是两个订单号的和,请问要SQL要怎么计算呢!!在同一个订单号只计算其它费用用1次就可以了!!
红色是商品的金额 其它是其它费用
订单号,
sum(价格)+max(其它费用) as 总金额
from tb
group by 订单号
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([订单号] varchar(3),[商品名称] varchar(1),[价格] int,[其它费用] int)
insert [tb]
select '001','a',1,1 union all
select '001','b',2,1 union all
select '001','c',5,1 union all
select '001','d',2,1 union all
select '002','a',1,2 union all
select '002','b',2,2
---查询---
select
订单号,
sum(价格)+max(其它费用) as 总金额
from tb
group by 订单号---结果---
订单号 总金额
---- -----------
001 11
002 5(所影响的行数为 2 行)
比如1+2+5+2+1+1+2+2=16还不是要这个两个订单分别求出来!!
用SQL的结果是16
select sum(总金额) as 总金额
from (
select 订单号,sum(价格)+max(其它费用) as 总金额 from tb group by 订单号)t
---结果---
总金额
-----------
16(所影响的行数为 1 行)
-- Author: liangCK 小梁
---------------------------------
--> 生成测试数据: @T
DECLARE @T TABLE (订单号 VARCHAR(3),商品名称 VARCHAR(1),价格 INT,其它费用 INT)
INSERT INTO @T
SELECT '001','a',1,1 UNION ALL
SELECT '001','b',2,1 UNION ALL
SELECT '001','c',5,1 UNION ALL
SELECT '001','d',2,1 UNION ALL
SELECT '002','a',1,2 UNION ALL
SELECT '002','b',2,2--SQL查询如下:SELECT (
SELECT SUM(价格)
FROM @T
)
+
(
SELECT
SUM(其它费用)
FROM @T AS A
WHERE 商品名称 IN(SELECT TOP 1 商品名称 FROM @T WHERE A.订单号=订单号)
)/*
-----------
16(1 行受影响)
*/
select order_code,max(bz) as a from [order] group by order_code) 这样子好像不行吧!!
create table tt(id varchar(10),
name varchar(10),
p1 int,
p2 int);
go
insert into tt(id,name,p1,p2)
select '001','a',1,1
union
select '001','b',2,1
union
select '001','c',5,1
union
select '001','d',2,1
union
select '002','a',1,2
union
select '002','b',2,2
go
select sum(aa.金额) as 总金额
from (select
id,
sum(p1)+max(p2) as 金额
from tt
group by id) aa