T1表
编号 总金额 批发价 利润
1001 10 8 1
1002 31 20 5
1003 59 50 20
.....
结果总次数 总利润 总批发价 10元内总和 11-30元内总和 31-50元内总和 50元以上总和
3 26 78 50 40元 10元 0说明
分段是以达到这个段的金额合计为结果比如参照我上面的分段。31元这个数字,在10元内总和 这个段里就占10元,然后在11-30元内总和 这个段里占20元,在31-50元内总和里占1元
编号 总金额 批发价 利润
1001 10 8 1
1002 31 20 5
1003 59 50 20
.....
结果总次数 总利润 总批发价 10元内总和 11-30元内总和 31-50元内总和 50元以上总和
3 26 78 50 40元 10元 0说明
分段是以达到这个段的金额合计为结果比如参照我上面的分段。31元这个数字,在10元内总和 这个段里就占10元,然后在11-30元内总和 这个段里占20元,在31-50元内总和里占1元
declare @tb table([编号] int,[总金额] int,[批发价] int,[利润] int)
insert @tb
select 1001,10,8,1 union all
select 1002,31,20,5 union all
select 1003,59,50,20select 总次数=count(1),
总利润=sum([利润]),
总批发价=sum([批发价]),
[10元内总和]=sum(case when [总金额]<=10 then [总金额] else null end),
[11-30元内总和]=sum(case when [总金额] between 11 and 30 then [总金额] else null end),
[31-50元内总和]=sum(case when [总金额] between 31 and 50 then [总金额] else null end),
[50元以上总和]=sum(case when [总金额]>50 then [总金额] else null end) from @tb
/*
总次数 总利润 总批发价 10元内总和 11-30元内总和 31-50元内总和 50元以上总和
----------- ----------- ----------- ----------- ----------- ----------- -----------
3 26 78 10 NULL 31 59
警告: 聚合或其他 SET 操作消除了空值。
*/
IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB(
ID VARCHAR(50),
JINE NUMERIC(19,6),
PIFA NUMERIC(19,6),
LIRUN NUMERIC(19,6)
)
INSERT INTO TB
SELECT '1001', 10, 8, 1 UNION ALL
SELECT '1002', 31, 20, 5 UNION ALL
SELECT '1003', 59, 50, 20 SELECT COUNT(1) '总次数',SUM(PIFA) '总批发价',SUM(LIRUN) '总利润'
,SUM(CASE WHEN JINE>10 THEN 10 ELSE JINE END) '10元内总和'
,SUM(CASE WHEN JINE>30 THEN 20 ELSE
(CASE WHEN JINE<11 THEN 0 ELSE JINE-10 END
)END) '11-30元内总和'
,SUM(CASE WHEN JINE>50 THEN 20 ELSE
(CASE WHEN JINE<31 THEN 0 ELSE JINE-30 END
)END) '31-50元内总和'
,SUM(CASE WHEN JINE<51 THEN 0 ELSE JINE-50 END) '50元以上总和'
FROM TB/*
总次数 总利润 总批发价 10元内总和 11-30元内总和 31-50元内总和 50元以上总和
3 78.000000 26.000000 30.000000 40.000000 21.000000 9.000000
*/
IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
GO
CREATE TABLE TB(
ID VARCHAR(50),
JINE NUMERIC(19,6),
PIFA NUMERIC(19,6),
LIRUN NUMERIC(19,6)
)
INSERT INTO TB
SELECT '1001', 10, 8, 1 UNION ALL
SELECT '1002', 31, 20, 5 UNION ALL
SELECT '1003', 59, 50, 20 SELECT COUNT(1) '总次数',SUM(PIFA) '总批发价',SUM(LIRUN) '总利润',
'10元内总和'=sum(case when JINE>10 then 10 else JINE end),
'11-30元内总和'=sum(case when JINE<11 then 0
when jine between 11 and 30 then jine-10
when jine>30 then 20 end),
'31-50元内总和'=sum(case when JINE<31 then 0
when jine between 31 and 50 then jine-30
when jine>50 then 20 end),
'50元以上总和'=sum(case when jine<51 then 0 else jine-50 end)
from tb 总次数 总批发价 总利润 10元内总和 11-30元内总和 31-50元内总和 50元以上总和
----------- --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- ---------------------------------------
3 78.000000 26.000000 30.000000 40.000000 21.000000 9.000000(1 行受影响)
跟鸭子的一样,为什么跟楼主的不一样
-- Author :fredrickhu(小F,向高手学习)
-- Date :2009-09-06 21:51:21
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([编号] int,[总金额] int,[批发价] int,[利润] int)
insert [tb]
select 1001,10,8,1 union all
select 1002,31,20,5 union all
select 1003,59,50,20
--------------开始查询--------------------------
select
count(1) '总次数',
sum(批发价) '总批发价',
sum(利润) '总利润',
sum(case when 总金额>10 then 10 else 批发价 end) as '10元内总和',
sum(case when 总金额<11 then 0 as'11-30元内总和'
when 总金额 between 11 and 30 then 批发价-10
when 总金额>30 then 20 end),
sum(case when 总金额<31 then 0 as '31-50元内总和'
when 总金额 between 31 and 50 then 总金额-30
when 总金额>50 then 20 end),
sum(case when 总金额<51 then 0 else 总金额-50 end)as '50元以上总和'
from
tb ----------------结果----------------------------
/* 总次数 总批发价 总利润 10元内总和 11-30元内总和 31-50元内总和 50元以上总和
----------- ----------- ----------- ----------- ----------- ----------- -----------
3 78 26 28 40 21 9(1 行受影响)*/