当前位置: 代码迷 >> Sql Server >> 需要大神求解
  详细解决方案

需要大神求解

热度:48   发布时间:2016-04-24 08:50:32.0
急需大神求解
表1
PRODUCT_SN    MC_CODE     OP_CODE      QUALITY_STATUS
20150101                   A                   001                         0
20150102                   A                   001                         0
20150103                   A                   001                         0
20150101                   B                   002                         1
20150102                   B                   002                         0
20150102                   B                   003                         1
20150102                   C                   004                         1

注:PRODUCT_SN--产品序列号;MC_CODE--物料号;OP_CODE--工序号;QUALITY_STATUS--质量状态(0代表合格,1代表不合格,只要一道工序的QUALITY_STATUS=1就代表该产品不合格)

要统计的结果如下(按照物料号分类统计):
MC_CODE     HGS          TOTAL       HGL
   A                    1                 3             33.33%
   B                    1                 2             50.00%
   C                    0                 1             0.00%

   注:HGS--合格数 ;  TOTAL--总数;HGL--合格率

如何写出该统计的存储过程求大神帮忙,尤其合格数怎么统计出来,谢谢!
------解决思路----------------------
with tb(PRODUCT_SN,MC_CODE,OP_CODE,QUALITY_STATUS) as
(
select '20150101', 'A', '001',0 union all
select '20150102', 'A', '001',0 union all
select '20150103', 'A', '001',0 union all
select '20150101', 'B', '002',1 union all
select '20150102', 'B', '002',0 union all
select '20150102', 'B', '003',1 union all
select '20150102', 'C', '004',1 union all
select '20150104', 'A', '002',0 union all
select '20150104', 'A', '003',0 union all
select '20150104', 'A', '004',0
),
tb1 as
(
select *,ROW_NUMBER()over(PARTITION by PRODUCT_SN,MC_CODE order by MC_CODE)rn from tb
),
tb2 as
(
select PRODUCT_SN,MC_CODE from tb where PRODUCT_SN not in (select PRODUCT_SN from tb where QUALITY_STATUS=1) group by PRODUCT_SN,MC_CODE
)
select a.MC_CODE,
COUNT(distinct b.PRODUCT_SN)HGS,
count(a.rn)Total,
convert(nvarchar(10),convert(decimal(18,2),convert(decimal(18,2),COUNT(distinct b.PRODUCT_SN))/convert(decimal(18,2),count(a.rn))*100))+'%' HGL from tb1 a
left join tb2 b on a.MC_CODE=b.MC_CODE and a.PRODUCT_SN=b.PRODUCT_SN
where a.rn=1
group by a.MC_CODE

是这样子吗
  相关解决方案