首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

急求这个sql的写法?在线!解决方案

2012-03-27 
急求这个sql的写法?在线!!!有如下一张表:表名为reportdidp_idgx_namehgl001001XHD65焊接0.97001002XHD65割

急求这个sql的写法?在线!!!
有如下一张表:表名为report

did p_id gx_name hgl

001001 XHD65 焊接 0.97
001002 XHD65 割弹簧 0.90
001003 XHD65 充气 0.98
001004 XHD65 调试 0.99
001005 XHD65 组装 0.96
001006 XHD65 包装 0.96
001001 XHD70 焊接 0.97
001002 XHD70 割弹簧 0.98
001003 XHD70 充气 0.99
001004 XHD70 调试 0.91
001005 XHD70 组装 0.92
001006 XHD70 包装 0.93


说明:did为编号,p_id为产品名称 ,gx_name为工序名称 hgl为工序合格率
其中一个p_id(产品)对应多道工序。表中为一个产品对应6道工序,相应有6个工序合格率(hgl)
问题:实现所有产品的每一道工序合格率的乘积,按工序名称分组(gx_name)
即实现如下结构
gx_namne hgl
 
焊接 0.97*0.97
充气 0.98*0.99
包装 0.96*0.93
调试 0.99*0.91
组装 0.96*0.92
割弹簧 0.90*0.98


特别提醒:report表中的数据是不确定的,是用户动态输入的。

请各位大侠指点,谢谢了。


[解决办法]
做两个视图,一个v1 select did,p_id,gx_name,hgl from report where p_id ='XHD65'
一个V2 select did,p_id,gx_name,hgl from report where p_id ='XHD70'

select v1.gx_name,convert(varchar(20),v1.hgl)+'*'+convert(varchar(20),v2.hgl)
from v1 inner join v2 on
v1.did=v2.did
order by v1.did

[解决办法]
--如果只是显示
select m.gx_namne , hgl = cast(m.hgl as varchar) + '*' + cast(n.hgl as varchar) 
from tb m , tb n
where m.p_id = 'XHD65' and n.p_id = 'XHD70' and m.gx_name = n.gx_name

--如果是计算
select m.gx_namne , hgl = m.hgl * n.hgl
from tb m , tb n
where m.p_id = 'XHD65' and n.p_id = 'XHD70' and m.gx_name = n.gx_name

[解决办法]
(我假设你的数据库字段都是文本字段,如果有数字字段,你就用cast进行转换一下)

--先创建一个视图
create view a
as
select distinct gx_name
from report ;

--然后创建有一个临时表tabletemp( gxname , hgl )


--然后在根据游标来实现

DECLARE @gx_name varchar(40)
DECLARE @as_hgl varchar(255) 
DECLARE @as_hglgroup varchar(255)



--根据视图取游标的工艺名称

DECLARE gxname_cursor CURSOR FOR
SELECT gx_name FROM a 

OPEN gxname_cursor

FETCH NEXT FROM gxname_cursor
INTO @gx_name ;

WHILE @@FETCH_STATUS = 0
BEGIN

set @as_hglgroup = ''
--后用游标来循环得到对应工艺的不同合格率
DECLARE authors_cursor CURSOR FOR
SELECT hgl FROM report 
WHERE gx_name = @gx_name 


OPEN authors_cursor

FETCH NEXT FROM authors_cursor
INTO @as_hgl ;


WHILE @@FETCH_STATUS = 0
BEGIN

-- Concatenate and display the current values in the variables.
set @as_hglgroup = @as_hglgroup + '*' + @as_hgl

-- This is executed as long as the previous fetch succeeds.
FETCH NEXT FROM authors_cursor
INTO @as_hgl ;
END

insert into tabletemp( gxname , hgl )
values ( @gx_name , @as_hglgroup )


FETCH NEXT FROM gxname_cursor
INTO @gx_name


CLOSE authors_cursor
DEALLOCATE authors_cursor
END


CLOSE gxname_cursor
DEALLOCATE gxname_cursor

热点排行