我知道我的语法一定有问题,但我似乎无法弄明白。
我希望从prop_and_cas_dtl_prdct_desc
或expir_prop_and_cas_dtl_prdct_cd
填充此列ren_prop_and_cas_dtl_prdct_cd
,具体取决于type_indicator
中的值,但在进入prop_and_cas_dtl_prdct_desc
之前,它应该看起来从prop_and_cas_dtl_prdct_desc
开始pc_ref_detail_product_cd
并选择与其expir_prop_and_cas_dtl_prdct_cd
或ren_prop_and_cas_dtl_prdct_cd
对应的一个。
我为可怕的缩进道歉,我知道这很难读,但这是我知道怎么做的最佳方式。
select
,ren_prop_and_cas_dtl_prdct_cd
...
,p_and_c_cd
,case when type_indicator in ('R','C') then
select prop_and_cas_dtl_prdct_desc
from pc_ref_detail_product_cd a inner join op_pif_coverage_rpc_new b
on a.prop_and_cas_dtl_prdct_cd = b.expir_prop_and_cas_dtl_prdct_cd
else when type_indicator in ('N','O') then
select prop_and_cas_dtl_prdct_desc
from pc_ref_detail_product_cd a inner join op_pif_coverage_rpc_new b
on a.prop_and_cas_dtl_prdct_cd = b.ren_prop_and_cas_dtl_prdct_cd
else NULL
END
AS prop_and_cas_dtl_prdct_desc
FROM dbo.op_pif_coverage_rpc_new
以下是我用来创建参考表的代码
create table pc_ref_detail_product_cd(
prop_and_cas_dtl_prdct_cd char(2),
prop_and_cas_dtl_prdct_desc char(30)
)
insert into pc_ref_detail_product_cd (prop_and_cas_dtl_prdct_cd, prop_and_cas_dtl_prdct_desc)
values ('01', 'CORE'),
('02', 'FORECLOSED'),
('04', 'TRUST'),
('06', 'MORTGAGE HOLDERS E&O'),
('07', 'SECURITY INTEREST E&O')
答案 0 :(得分:2)
如果需要根据附加列中的值选择不同表中的列,则需要在查询中包含所有表,并使用适当的JOIN
而不是像这样的用例语句
SELECT CASE WHEN a.MyColumn = 0 THEN b.SomeColumn
WHEN a.MyColumn = 1 THEN a.SomeColumn
END AS SomeColumn
FROM MyTableA AS a
JOIN MyTableB AS b
ON a.ID = b.ID
而不是在case语句中使用select语句,您只需从以太表中选择每个特定情况所需的列。
答案 1 :(得分:0)
我明白了。这是我使用的SQL。对不起,如果我在原始问题中的可怕代码中不知道我想做什么。
select
,ren_prop_and_cas_dtl_prdct_cd
...
,p_and_c_cd
,case when type_indicator in ('R','C') then
(select prop_and_cas_dtl_prdct_desc
from pc_ref_detail_product_cd a where expir_prop_and_cas_dtl_prdct_cd = prop_and_cas_dtl_prdct_cd)
when type_indicator in ('N','O') then
(select prop_and_cas_dtl_prdct_desc
prop_and_cas_dtl_prdct_desc
from pc_ref_detail_product_cd a where ren_prop_and_cas_dtl_prdct_cd = prop_and_cas_dtl_prdct_cd)
else NULL
END
AS prop_and_cas_dtl_prdct_desc
FROM dbo.op_pif_coverage_rpc_new