当前位置: 代码迷 >> Sql Server >> 关于分类查询的有关问题
  详细解决方案

关于分类查询的有关问题

热度:10   发布时间:2016-04-24 09:18:07.0
关于分类查询的问题
我现在有一个出租车载客的信息记录表,记录了所有车辆的所有载客记录,包括开始时间结束时间,金额等等。

现在,我要按下图所示的表格样式进行统计,有哪位大神能帮帮我?

------解决思路----------------------
--定义价格范围表
Declare @TmpPrice Table(
RID Int,
Note NVarchar(100),
MinPrice Decimal(18,4),
MaxPrice Decimal(18,4))

--写入价格范围数据(测试只分了5档)
Insert Into @TmpPrice
Select 1,N'0-50档',0,50
Union
Select 2,N'50-100档',50,100
Union
Select 3,N'100-150档',100,150
Union
Select 4,N'150-200档',150,200
Union
Select 5,N'200以上档',200,9999

--定义业务明细表
Declare @TmpData Table(
RecID Int,
Price Decimal(18,4))

--写入测试数据
Insert Into @TmpData
Select 1,15
Union
Select 2,100
Union
Select 3,500

--读取明细数据,并按档次分组统计
Select B.RID,B.Note,COUNT(1),SUM(A.Price)
From @TmpData A
Inner Join @TmpPrice B On A.Price > B.MinPrice And A.Price <= B.MaxPrice
Group By B.RID,B.Note
Order By B.RID
------解决思路----------------------
WITH 分段表(No,m1,m2,memo) AS (
    SELECT 1,10,20,N'10-20元' UNION ALL
    SELECT 1,20,30,N'20-30元' UNION ALL
    ...
    SELECT 1,200,100000000,N'200元以上'
)
    SELECT s.memo,
           t.c,
           t.m
      FROM (
                SELECT r.No,
                       COUNT(r.金额) c,
                       ROUND(SUM(r.金额)/10000.0,0) m
                  FROM 分段表 s
             LEFT JOIN 记录表 r
                    ON s.m1 <= r.金额
                   AND r.金额 < s.m2
              GROUP BY S.No
           ) t
      JOIN 分段表 s
        ON s.No = t.No
  ORDER BY t.No

------解决思路----------------------
SELECT SUM(A.TotalMoney),COUNT(A.NewType) FROM
(SELECT TotalMoney, 
     CASE WHEN TotalMoney <10 THEN 1
  WHEN TotalMoney >=10 AND TotalMoney <20 THEN 2
  WHEN TotalMoney >=20 AND TotalMoney <30 THEN 3
  WHEN TotalMoney >=30 AND TotalMoney <50 THEN 4
  WHEN TotalMoney >=50 AND TotalMoney <100 THEN 5
  WHEN TotalMoney >=100 AND TotalMoney <200 THEN 6
  WHEN TotalMoney > 200 THEN 7
ELSE NULL END NewType      
FROM [HQGPS_V4_OBD_Test].[dbo].[vt_taxi_FeeInfo]) A 
GROUP BY A.NewType
  相关解决方案