当前位置: 代码迷 >> Sql Server >> 比对雷同日期,相同类别的生产点数
  详细解决方案

比对雷同日期,相同类别的生产点数

热度:86   发布时间:2016-04-24 09:46:13.0
比对相同日期,相同类别的生产点数
有一个问题请教下各位大神。

就是我想统计我数据库里面,相同月份,相同产品类型的生产点数。
然后,可以使用以下语句。

select 产品类型,sum(生产点数) as生产点数,月份
from dbo.SMT生产报表  group by 产品类型,月份 


但是现在有一个条件限制,就是我数据库产品类型里面,有5个种类别
SR/T,SR/S,SR/B,SPWC,SKWC
现在呢,上头要求,SR/T跟SR/S需要统计在一起

也就是产品类型变成了4种来统计(实际数据库里面还是5种),
即,SR/T跟SR/S做为相同一种类型SR/T来统计了。


*********************
没分了。。。。帮帮忙,谢谢啊。
------解决思路----------------------
用CASE 把它们当成同一种情况处理即可,你参考一下
select CASE 产品类型 WHEN 'SR/T' THEN 'SR/T AND SR/S' WHEN 'SR/S' THEN 'SR/T AND SR/S' ELSE 产品类型 END[产品类型],sum(生产点数) as生产点数,月份
from dbo.SMT生产报表  group by CASE 产品类型 WHEN 'SR/T' THEN 'SR/T AND SR/S' WHEN 'SR/S' THEN 'SR/T AND SR/S' ELSE 产品类型 END,月份 

------解决思路----------------------
SELECT  产品类型=CASE WHEN [产品类型] IN('SR/T','SR/S') THEN 'SR/T+SR/S' ELSE [产品类型] END
       ,SUM(生产点数) as生产点数
       ,月份
FROM    dbo.SMT生产报表
GROUP BY CASE WHEN [产品类型] IN('SR/T','SR/S') THEN 'SR/T+SR/S' ELSE [产品类型] END
       ,月份 

------解决思路----------------------
只要做 SR/S 到 SR/T 的转换就可以了。
实际上这种归类统计做个转换的小字典会很方便,随便怎么合并都可以。
WITH 归类(类型,统计类型) AS (
    SELECT 'SR/T','SR/T' UNION ALL
    SELECT 'SR/S','SR/T' UNION ALL
    SELECT 'SR/B','SR/B' UNION ALL
    SELECT 'SPWC','SPWC' UNION ALL
    SELECT 'SKWC','SKWC' 
)
    select c.统计类型 as 产品类型,
           sum(s.生产点数) as 生产点数,
           s.月份
      from dbo.SMT生产报表 s
      JOIN 归类 c
        ON c.类型 = s.产品类型
  group by c.统计类型,s.月份
  相关解决方案