子查询多行的情况
case when subquery multiple row
我在 DB2 9.7.01
上有树 table
Table A(这里是起始数据)
codeA |type
-----------------------------
P003 |P
K001 |K
Table B(这里是产品数据)
codeB |description
-----------------------------
P001 |Product one
P002 |Product two
P003 |Product three
Table C(这里是套件数据;套件包括一个或多个产品)
codeC |description |codeB
-----------------------------
K001 |Kit one |P001
K001 |Kit one |P002
我需要读取 A table 的每条记录,如果字段类型是 "K" 那么查询必须 return 它的乘积;如果类型是 "P" 则只查询 return 一种产品;
这是要完成的查询
Select a.codeA AS codeExternal,
case
when a.type = 'K' then (select C.CODEB from C where A.CODEA = C.CODEC)
else a.CODEA
end as codeInternal
from
A
left B
ON a.CODEA = B.CODEB
但查询 return 只有
codeExt | code Int
---------------------------
P003 | P003
K001 | P001
而不是等待
codeExt | code Int
---------------------------
P003 | P003
K001 | P001
K001 | P002
尝试这样的事情:
select A.CodeA CodeExt, B.CodeB CodeInt
from A inner join B on A.CodeA=B.CodeB and A.type='P'
union all
select A.CodeA CodeExt, C.CodeB CodeInt
from A inner join C on A.CodeA=C.CodeC and A.type='K'
如果你想删除doublon,使用union而不是union all
我在 DB2 9.7.01
上有树 tableTable A(这里是起始数据)
codeA |type
-----------------------------
P003 |P
K001 |K
Table B(这里是产品数据)
codeB |description
-----------------------------
P001 |Product one
P002 |Product two
P003 |Product three
Table C(这里是套件数据;套件包括一个或多个产品)
codeC |description |codeB
-----------------------------
K001 |Kit one |P001
K001 |Kit one |P002
我需要读取 A table 的每条记录,如果字段类型是 "K" 那么查询必须 return 它的乘积;如果类型是 "P" 则只查询 return 一种产品; 这是要完成的查询
Select a.codeA AS codeExternal,
case
when a.type = 'K' then (select C.CODEB from C where A.CODEA = C.CODEC)
else a.CODEA
end as codeInternal
from
A
left B
ON a.CODEA = B.CODEB
但查询 return 只有
codeExt | code Int
---------------------------
P003 | P003
K001 | P001
而不是等待
codeExt | code Int
---------------------------
P003 | P003
K001 | P001
K001 | P002
尝试这样的事情:
select A.CodeA CodeExt, B.CodeB CodeInt
from A inner join B on A.CodeA=B.CodeB and A.type='P'
union all
select A.CodeA CodeExt, C.CodeB CodeInt
from A inner join C on A.CodeA=C.CodeC and A.type='K'
如果你想删除doublon,使用union而不是union all