bzrq bzzb bzline bzcplb bztype 無列名 無列名
20090105 FQC I1 LGP裁切 5S 80 240
20090105 FQC I1 LGP裁切 休息 40 880
20090105 FQC I1 LGP裁切 休息 40 1040
20090105 FQC I1 LGP裁切 休息 240 1040
20090105 FQC I1 LGP裁切 休息 40 1040
20090105 FQC I1 LGP裁切 休息 240 1040
20090105 FQC I1 LGP裁切 休息 40 1040
20090105 FQC I1 LGP裁切 休息 240 1040
20090105 FQC I1 LGP裁切 5S 80 1040
20090105 FQC I1 LGP裁切 休息 40 80
20090105 FQC I1 LGP裁切 休息 240 80
20090105 FQC I1 LGP裁切 休息 40 80
20090105 FQC I1 LGP裁切 休息 240 80
20090105 FQC I1 LGP裁切 休息 40 80
20090105 FQC I1 LGP裁切 休息 240 80
20090105 FQC I1 LGP裁切 休息 40 80
20090105 FQC I1 LGP裁切 休息 240 80
20090105 FQC I1 LGP裁切 5S 80 80
20090105 FQC I1 LGP裁切 休息 40 480
20090105 FQC I1 LGP裁切 5S 80 480
20090105 FQC I1 LGP裁切 休息 240 960
20090105 FQC I1 LGP裁切 5S 80 960
20090105 FQC I1 LGP裁切 5S 80 880
20090104 FQC I1 LGP裁切 休息 240 40
20090104 FQC I1 LGP裁切 休息 40 40
20090104 FQC I1 LGP裁切 休息 240 40
20090104 FQC I1 LGP裁切 休息 40 200
20090104 FQC I1 LGP裁切 休息 240 200
20090104 FQC I1 LGP裁切 休息 240 200
20090104 FQC I1 LGP裁切 待料 240 200
20090104 FQC I1 LGP裁切 待排程 480 200
20090104 FQC I1 LGP裁切 待排程 280 200
20090104 FQC I1 LGP裁切 休息 240 200
20090104 FQC I1 LGP裁切 休息 40 200
20090104 FQC I1 LGP裁切 休息 240 200
20090104 FQC I1 LGP裁切 休息 40 800
20090104 FQC I1 LGP裁切 休息 240 800
20090104 FQC I1 LGP裁切 休息 240 800
20090104 FQC I1 LGP裁切 待料 240 800
20090104 FQC I1 LGP裁切 待排程 480 800
20090104 FQC I1 LGP裁切 待排程 280 800
20090104 FQC I1 LGP裁切 休息 240 800
20090104 FQC I1 LGP裁切 休息 40 800
20090104 FQC I1 LGP裁切 休息 240 800
20090104 FQC I1 LGP裁切 休息 40 480
20090104 FQC I1 LGP裁切 休息 240 480
20090104 FQC I1 LGP裁切 休息 240 480
20090104 FQC I1 LGP裁切 休息 40 120
20090104 FQC I1 LGP裁切 休息 240 120
20090103 FQC I1 LGP裁切 待排程 160 960
20090103 FQC I1 LGP裁切 休息 40 960
20090103 FQC I1 LGP裁切 休息 240 960
20090103 FQC I1 LGP裁切 休息 40 960
20090103 FQC I1 LGP裁切 休息 240 960
20090103 FQC I1 LGP裁切 待排程 480 960
20090103 FQC I1 LGP裁切 休息 240 960
20090103 FQC I1 LGP裁切 休息 40 960
20090103 FQC I1 LGP裁切 休息 240 960
20090103 FQC I1 LGP裁切 休息 40 800
20090103 FQC I1 LGP裁切 休息 240 800
20090103 FQC I1 LGP裁切 休息 40 800
20090103 FQC I1 LGP裁切 休息 240 800
20090103 FQC I1 LGP裁切 待排程 480 800
20090103 FQC I1 LGP裁切 休息 240 800
20090103 FQC I1 LGP裁切 休息 40 800
20090103 FQC I1 LGP裁切 休息 240 800
20090103 FQC I1 LGP裁切 待排程 160 1040
20090103 FQC I1 LGP裁切 休息 40 1040
20090103 FQC I1 LGP裁切 休息 240 1040
20090103 FQC I1 LGP裁切 休息 40 1040
20090103 FQC I1 LGP裁切 休息 240 1040
20090103 FQC I1 LGP裁切 待排程 480 1040
20090103 FQC I1 LGP裁切 休息 240 1040
20090103 FQC I1 LGP裁切 休息 40 1040
20090103 FQC I1 LGP裁切 休息 240 1040
20090103 FQC I1 LGP裁切 待排程 160 960
20090103 FQC I1 LGP裁切 休息 40 960
20090103 FQC I1 LGP裁切 休息 240 960
20090103 FQC I1 LGP裁切 休息 40 960
20090103 FQC I1 LGP裁切 休息 240 960
20090103 FQC I1 LGP裁切 待排程 480 960
20090103 FQC I1 LGP裁切 休息 240 960
20090103 FQC I1 LGP裁切 休息 40 960
20090103 FQC I1 LGP裁切 休息 240 960
20090102 FQC I1 LGP裁切 休息 40 80
20090102 FQC I1 LGP裁切 休息 240 20
20090102 FQC I1 LGP裁切 待排程 480 20
20090102 FQC I1 LGP裁切 休息 240 20
20090102 FQC I1 LGP裁切 休息 240 20
--以下是SQL
declare @tbl table
(
bzrq nchar(8) ,
bzzb nvarchar(50) ,
bzline nvarchar(50) ,
bzcplb nvarchar(50) ,
bztype nvarchar(50) ,
TimeNum int,
total int )
insert into @tbl
--以下代碼是得到數據
select tbLineRate.bzrq
,tbLineRate.bzzb
,tbLineRate.bzline
,tbLineRate.bzcplb
,tbLineRate.bztype
,tbLineRate.timenum*tbLineRate.bzrs
,(tbl_PrdRate.TimeNum-tbl_PrdRate.bzNoTime3)*tbl_PrdRate.liners
from tbLineRate,tbl_PrdRate
where rtrim(ltrim(tbLineRate.bzrq))=rtrim(ltrim(tbl_PrdRate.bzrq))
and rtrim(ltrim(tbLineRate.bzzb)) COLLATE Chinese_Taiwan_Stroke_CI_AS=rtrim(ltrim(tbl_PrdRate.bzzb))
and rtrim(ltrim(tbLineRate.bzline)) COLLATE Chinese_Taiwan_Stroke_CI_AS=rtrim(ltrim(tbl_PrdRate.bzline))
and rtrim(ltrim(tbLineRate.bzcplb)) COLLATE Chinese_Taiwan_Stroke_CI_AS=rtrim(ltrim(tbl_PrdRate.bzcplb))
and len(tbLineRate.bzrq)=8
and tbLineRate.bzrq between 20090101 and 20090105
and tbLineRate.bzzb COLLATE Chinese_Taiwan_Stroke_CI_AS like '%FQC%'
and tbLineRate.bzline COLLATE Chinese_Taiwan_Stroke_CI_AS like '%I1%'
and tbLineRate.bzcplb COLLATE Chinese_Taiwan_Stroke_CI_AS like '%LGP裁切%'
---------------------------------
create table #tbltmp
(
bztype nvarchar(50),
rq nchar(8),
num int,
total int
)insert into #tbltmp
select a.bztype,a.rq,sum(TimeNum) as num,sum(total)total from
(
select bztype,right(bzrq,8)as rq,TimeNum,total from @tbl a
) as a group by a.bztype,a.rq
declare @sql varchar(max)
set @sql = ' select isnull(bztype,''百分比'') [原因],'
select @sql= @sql+'case when grouping(bztype)=0 then rtrim(sum(case rq when '''+rq+''' then num else 0 end)) else ltrim(str( sum(case rq when '''+rq+''' then num else 0 end)*100.0/sum(total),8,2))+''%'' end as ['+rq+'],'
from (select distinct rq from #tbltmp ) a
set @sql = stuff(@sql,len(@sql),1,'')
set @sql=@sql+ ',case when grouping(bztype)=0 then rtrim(sum(num)) else '''' end 合計 from #tbltmp group by bztype with rollup'set @sql=@sql+' union select ''非生產時間合計'','
select @sql=@sql+'cast((select sum(num) from #tbltmp where rq='''+rq+''') as varchar),' from (select distinct rq from #tbltmp ) b
set @sql=@sql+'cast((select sum(num) from #tbltmp) as varchar)'set @sql=@sql+' union select ''生產時間合計'','
select @sql=@sql+'cast((select sum(total) from #tbltmp where rq='''+rq+''') as varchar),' from (select distinct rq from #tbltmp ) b
set @sql=@sql+'cast((select sum(total) from #tbltmp) as varchar)'set @sql='select * from ('+@sql+') z order by case z.[原因] when ''非生產時間合計'' then ''300'' when ''生產時間合計'' then ''200'' when ''百分比'' then ''100'' else z.[原因] end desc '
exec(@sql)drop table #tbltmp
--結果:
原因 20090102 20090103 20090104 20090105 合計
待排程 3840 5120 7600 0 16560
待料 0 0 2400 0 2400
休息 8320 8640 10400 7840 35200
5S 0 0 0 560 560
非生產時間合計 12160 13760 20400 8400 54720
生產時間合計 29680 36360 33480 41040 140560
百分比 8.65% 9.79% 14.51% 5.98% 以上的問題:
1.百分比計算不對,應該是非生產時間合計/生產時間合計
2.合計也要有百分比
請大家幫忙解決一下
declare @table table (原因 varchar(14),[20090102] varchar(8),[20090103] varchar(8),[20090104] varchar(8),[20090105] varchar(8),合計
varchar(6))
insert into @table
select '非生產時間合計','12160','13760','20400','8400','54720' union all
select '生產時間合計','29680','36360','33480','41040','140560'
select * from @table
/*
原因 20090102 20090103 20090104 20090105 合計
-------------- -------- -------- -------- -------- ------
非生產時間合計 12160 13760 20400 8400 54720
生產時間合計 29680 36360 33480 41040 140560
*/估计楼主就是要在下面加上百分比
最上面的测试数据只有一个表,还有两列没有列名?
无列名是怎么回事?
(tbl_PrdRate.TimeNum-tbl_PrdRate.bzNoTime3)*tbl_PrdRate.liners 又是怎么回事?
生產時間是哪一个字段??