SQL 中的 IF/Case 语句
IF / Case statment in SQL
我有一列有 0 或 1。我喜欢进行以下设置:
If 0 than put / use the Region_table (here I have regions like EMEA, AP, LA with only goods) and when it 1 then put / use the Plant_table(这里我有生产非成品的工厂)数据。
我试着用 2 个不同的语句来写,但效果不好:
,Case
when [FG_NFG_Selektion] = '0' Then 'AC_region'
End as 'AC_region'
,Case
when [FG_NFG_Selektion] = '1' Then 'AC_plant'
End as 'AC_plant'
我不是 100% 清楚你在找什么,但如果你想根据 [FG_NFG_Selektion]
字段中的值从不同的表中获取数据,你可以这样做:
SELECT
CASE
WHEN [FG_NFG_Selektion] = '0' THEN r.some_col -- If 0, use value from "region" table
WHEN [FG_NFG_Selektion] = '1' THEN p.some_col -- If 1, use value from "plant" table
END AS new_field
FROM MyTable t
LEFT JOIN AC_region r ON t.pk_col = r.pk_col -- get data from "AC_region" table
LEFT JOIN AC_plant p ON t.pk_col = p.pk_col -- get data from "AC_plant" table
;
如果 [FG_NFG_Selektion]
是数字字段,则应删除单引号:[FG_NFG_Selektion] = 0
.
我强烈建议将条件放在 ON
子句中:
SELECT COALESCE(r.some_col, p.some_col) as som_col
FROM t LEFT JOIN
AC_region r
ON t.pk_col = r.pk_col AND
t.FG_NFG_Selektion = '0' LEFT JOIN
AC_plant p
ON t.pk_col = p.pk_col AND
t.FG_NFG_Selektion = '1';
我为什么推荐这个?首先,如果 table 中有多个匹配项,这将正常工作。在这种情况下,这可能不是问题,但在其他情况下可能是问题。你不想弄清楚额外的行来自哪里。
其次,将条件放在 ON
子句中允许 optimizer/execution 引擎利用它们。例如,在索引中更可能使用 FG_NFG_Selektion
。
我有一列有 0 或 1。我喜欢进行以下设置:
If 0 than put / use the Region_table (here I have regions like EMEA, AP, LA with only goods) and when it 1 then put / use the Plant_table(这里我有生产非成品的工厂)数据。
我试着用 2 个不同的语句来写,但效果不好:
,Case
when [FG_NFG_Selektion] = '0' Then 'AC_region'
End as 'AC_region'
,Case
when [FG_NFG_Selektion] = '1' Then 'AC_plant'
End as 'AC_plant'
我不是 100% 清楚你在找什么,但如果你想根据 [FG_NFG_Selektion]
字段中的值从不同的表中获取数据,你可以这样做:
SELECT
CASE
WHEN [FG_NFG_Selektion] = '0' THEN r.some_col -- If 0, use value from "region" table
WHEN [FG_NFG_Selektion] = '1' THEN p.some_col -- If 1, use value from "plant" table
END AS new_field
FROM MyTable t
LEFT JOIN AC_region r ON t.pk_col = r.pk_col -- get data from "AC_region" table
LEFT JOIN AC_plant p ON t.pk_col = p.pk_col -- get data from "AC_plant" table
;
如果 [FG_NFG_Selektion]
是数字字段,则应删除单引号:[FG_NFG_Selektion] = 0
.
我强烈建议将条件放在 ON
子句中:
SELECT COALESCE(r.some_col, p.some_col) as som_col
FROM t LEFT JOIN
AC_region r
ON t.pk_col = r.pk_col AND
t.FG_NFG_Selektion = '0' LEFT JOIN
AC_plant p
ON t.pk_col = p.pk_col AND
t.FG_NFG_Selektion = '1';
我为什么推荐这个?首先,如果 table 中有多个匹配项,这将正常工作。在这种情况下,这可能不是问题,但在其他情况下可能是问题。你不想弄清楚额外的行来自哪里。
其次,将条件放在 ON
子句中允许 optimizer/execution 引擎利用它们。例如,在索引中更可能使用 FG_NFG_Selektion
。