我在Oracle中有两个表
TableProducts
Product_Code
BGU
LSO
MPA
MPA4
MPA5
TPA
UGU
对于此示例,现在我有7个值,但以后可能有9个值。
TableContacts
Product_Code
,Email
,PDF
[Email
和PDF
具有两个可能的值'N'
或'Y'
。
我需要根据行数位置用Product_Code
,Email
和PDF
字段的组合来填充TableContacts。
Rownum = 1
-> Product_Code='BGU'
,Email='N'
,PDF='N'
Rownum = 2
-> Product_Code='BGU'
,Email='N'
,PDF='Y'
Rownum = 3
-> Product_Code='BGU'
,Email='Y'
,PDF='N'
Rownum = 4
-> Product_Code='BGU'
,Email='Y'
,PDF='Y'
Rownum = 5
-> Product_Code='LSO'
,Email='N'
,PDF='N'
如果我有Product_Code
的7个值,Email
的2个值和PDF
的2个值,那么我将需要填写(7 * 2 * 2)= 28行。
如何在这种情况下创建和SQL更新TableContacts?
部分地,要求没有意义。关系数据库中表中的行不会以任何方式进行排序,因此-表示要引用的行数是... strange。因此,我修改了contacts
表并添加了另一列-rn
-该列显示您的rownum。
此外,此示例仅显示3个产品(不想输入所有产品)。后面的代码与这些产品的数量无关,并且无论如何都可以使用。
产品:
SQL> select * From products;
CODE
-----
BGU
LSO
MPA
插入联系人:
SQL> insert into contacts (rn, code, email, pdf)
2 with temp as
3 (select p.code, x.lvl
4 from products p cross join (Select level lvl from dual connect by level <= 4) x
5 )
6 select t.lvl,
7 t.code,
8 case when t.lvl in (1, 2) then 'N'
9 when t.lvl in (3, 4) then 'Y'
10 end email,
11 --
12 case when t.lvl in (1, 3) then 'N'
13 when t.lvl in (2, 4) then 'Y'
14 end pdf
15 from temp t;
12 rows created.
结果:
SQL> select * From contacts
2 order by code, rn;
RN CODE E P
---------- ----- - -
1 BGU N N
2 BGU N Y
3 BGU Y N
4 BGU Y Y
1 LSO N N
2 LSO N Y
3 LSO Y N
4 LSO Y Y
1 MPA N N
2 MPA N Y
3 MPA Y N
4 MPA Y Y
12 rows selected.
SQL>