sql语句写一个存储过程 将 三张表中的各一个字段数据提取插入一张新表中,但要求有两个字段是互斥的

有一出现,另一个的那一列 就显示空白
create procedure add_table
is
begin
insert into wip_led_opration(operation_id,led_pc_id,led_screen_id)
select operation_id,led_pc_id,led_screen_id from fnd_led_pc ,fnd_led_screen ,fnd_operation
where fnd_operation.status=1 and fnd_led_screen.status=1 and fnd_led_pc.status=1 and fnd_operation.status=fnd_led_screen.status and fnd_led_screen.status=fnd_led_pc.status ;
end;

即pc_id,screen_id只能出现一个

pc_id,screen_id哪个优先?以pc_id优先为例:
oracle用decode函数,sqlserver可以用case...when,给你个oracle的例子
create procedure add_table
is
begin
insert into wip_led_opration(operation_id,led_pc_id,led_screen_id)
select operation_id,led_pc_id, decode(led_pc_id,null,led_screen_id,null)
-- 逻辑:第三列led_screen_id,先判断led_pc_id是否为空,为空则用led_screen_id,非空即led_pc_id存在,则led_screen_id列位置留空
from fnd_led_pc ,fnd_led_screen ,fnd_operation
where fnd_operation.status=1
and fnd_led_screen.status=1
and fnd_led_pc.status=1
-- and fnd_operation.status=fnd_led_screen.status --这个条件是多余的,两个值都=1了
and fnd_led_screen.status=fnd_led_pc.status ;
end;
/* 另外提几点建议
1. 建议给三个表加上别名
2. 多余的连接条件我注释掉了,虽然对执行计划应该没有太大影响
3. SELECT后最好标识出源表,比如fnd_operation.operation_id,这样自己看着也清楚
*/
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-23
pc_id,screen_id同时出现去掉哪个?

下例假设去掉screen_id
select
operation_id,
led_pc_id,
(case when led_pc_id is not null then null else led_screen_id end) led_screen_id
...追问

另外两张表里 都有这两个字段的数据,

要在新建的那张表中实现效果 即一条生产线要么只能生产 液晶屏 要么生产液晶电脑

两个都要输出但是 输出pc_id时screen_id那一列为空(就是不insert)
输出screen_id时pc_id那一列为空(就是不insert)

追答

你的意思不大明白
我上面sql文的意思就是pc_id不为空时screen_id为空(即,插入NULL)

如果你需要的是两列并一列的话
insert into wip_led_opration(operation_id,led_id)
select
operation_id,
(case when led_pc_id is not null then led_pc_id else led_screen_id end) led_id
...

本回答被网友采纳

sql server如何用存储过程把多个表的数据添加到一张表中,表字段都很...
insert into 表名 --这里表要存在 存储你处理的数据 否则就用select * into from tb 的格式 select col1,col2 from a union all select col1,col2 from b ……go exec usp_tableall

sql server如何用存储过程把多个表的数据添加到一张表中,表字段都很...
insert into 表名 --这里表要存在 存储你处理的数据 否则就用select * into from tb 的格式 select col1,col2 from a union all select col1,col2 from b ……go exec usp_tableall

怎样用sql server的存储过程,把几张表的内容放在同一张临时表中?
CREATE OR REPLACE PROCEDURE PRO_NAME AS BEGIN INSERT INTO TEMP_NAME SELECT A.ID AS ID,A.NAME AS NAME,B.PRICE AS PRICE2010,C.PRICE AS PRICE2011,D.PRICE AS PRICE2012 FROM FRUITS A, PRICE2010 B, PRICE2011 C, PRICE2012 D WHERE A.ID = B.ID AND A.ID = C.ID AND ...

在sql中截取字符串并插入某张表中
select * from dbo.getnumtotable('1,2,32,4,5,6', ',')

怎么把下面的的sql语句查询出来的结果插入到一张新表中去 求大神...
另外给你一个方式,你看看用得上用不上--表 create table test (name varchar(50))go --动态sql添加数据 insert into test exec('select 1')go --存储过程 create proc protest as declare @sql nvarchar(100) = ''declare @s int = 1 while(@s < 5)begin select @sql += 'select '...

...结果数据合并更新到B表的一个字段数据里,存储过程如何写?
--假设B表只有2个字段(姓名,信息汇总),且姓名是关联条件 --合并更新表B merge into 表B b --使用表A using 表A a --通过[姓名]关联匹配 on (a.姓名 = b.姓名)--能匹配到的 when matched then update set 信息汇总 = a.省份||a.城市||a.县区||a.详细地址||','||a.手机||'-...

如何用SQL创建一个存储过程来修改表中指定列的数据?
简单啊!我举个例子给你 create proc upd_student @column varchar(10),@data varchar(8)as declare @sql nvarchar(4000)set @sql = 'update student set '+@column+' = '''+@data+''' where id = 1'execute @sql go

如何使用sql语句批量把一个数据表内容复制到另一个数据表中
sql1=insert into table1(a, b, c) select d,e,f from table2 sql2=insert into table1 select * from table2 table1 为新表 table2 为要复制的表 sql1 复制几个字段 字段类型必须相同 sql2 为复制全部字段

pl\/sql写存储过程,怎么插入新数据
在存储过程中插入数据肯定用到sql语句,写好insert语句就好了。create or replace procedure p_insert_mt_jx(P_a1 in varchar2,P_a2 in varchar2,P_a3 in varchar2,P_a4 in varchar2)assql_str varchar2(100);beginsql_str:='insert into mt_jx (a1,a2,a3,a4) values ('||P_a1||',...

sql 怎样读取一个表中的某个字段 然后写入另一个表中?
insert into 新表名(字段名) select 某个字段 from 旧表名 如果查询原表中某个字段值需要条件的话就在上面这句sql后加上:where 某字段+查询条件;

相似回答