hivecase when 子查询
时间: 2023-07-25 08:11:32 浏览: 43
Hive中的CASE WHEN语句可以嵌套子查询,例如:
```
SELECT col1,
CASE WHEN col2 IN (SELECT col3 FROM table1) THEN 'yes' ELSE 'no' END as result
FROM table2;
```
在这个例子中,如果col2在table1的col3中存在,则将result列设置为'yes',否则设置为'no'。子查询在CASE WHEN语句中的使用方式与在其他查询语句中的使用方式相同。
相关问题
hive不能在case when使用子查询,换个写法
如果Hive版本较老,不支持在CASE WHEN语句中使用子查询,可以使用LEFT JOIN的方式来实现类似的查询,具体如下所示:
```
SELECT
CASE
WHEN t1.currtype = '019' THEN t2.baserate
ELSE t1.baserate
END AS new_baserate
FROM table_name t1
LEFT JOIN (
SELECT baserate
FROM table_name
WHERE currtype = '014'
) t2 ON t1.currtype = '019';
```
上述语句中,首先进行了一个LEFT JOIN操作,将currtype为019的记录连接上currtype为014的记录,从而获得了currtype为019时对应的baserate值。然后在CASE WHEN语句中使用了LEFT JOIN查询得到的结果,从而实现了类似子查询的功能。这样就可以得到符合要求的结果了。
when后的子查询 = 0 显示语法错误
Hive中,当我们在`CASE WHEN`语句中使用子查询时,子查询必须放在括号中,并且必须使用关键字`SELECT`。因此,如果您的子查询中包含`= 0`,则需要将`= 0`移动到`SELECT`语句中,并将子查询的结果与0进行比较。以下是示例代码:
```
SELECT
CASE
WHEN
(SELECT SUM(INSTR(concat(JNL.FIELD522,CHR(10),JNL.FIELD523,CHR(10),JNL.FIELD524,CHR(10),JNL.FIELD525),UPPER(PRM.NATIONALITY)))
FROM PARA_NATIONALITY PRM
) = 0
THEN SUBSTR(JNL.FIELD522,1,2)
END
FROM FCM_ABR F
JOIN TBFTJNL S ON F.ABR = S.ABR
JOIN JNL ON S.JNL_NO = JNL.JNL_NO;
```
在这个示例中,我们将`= 0`从子查询中移动到SELECT语句中,并将子查询的结果与0进行比较。这样就可以在Hive中正确地使用子查询来实现您的需求了。