SQL 查询case when without else or doing nothing?

SQL query case when without else or do nothing?

假设我在 table_name_a 中有一些样本数据如下:

    code     val_a  val_b    remark   date
   ------------------------------------------
1   00001    500    0.1      111      20191108
2   00001    1000   0.2      222      20191109
3   00002    200    0.1      111      20191110
4   00002    400    0.3      222      20191111
5   00001    200    0.2      333      20191112
6   00001    400    0.1      444      20191113

我的预期输出如下:


        code    111_a  111_b 222_a 222_b 333_a ....
       --------------------------------------------
    1   00001    500    ..    ..     ..   ..    

下面的 SQL 查询将包含涵盖正确值的 0 值,是否可以在没有 Else 的情况下查询或什么都不做?

SELECT code, date,
       CASE WHEN t.remark='111' THEN t.val_a ELSE 0 END 111_a,
       CASE WHEN t.remark='111' THEN t.val_b ELSE 0 END 111_b,
       CASE WHEN t.remark='222' THEN t.val_a ELSE 0 END 222_a,
       CASE WHEN t.remark='222' THEN t.val_b ELSE 0 END 222_b,
       CASE WHEN t.remark='333' THEN t.val_a ELSE 0 END 333_a,
       CASE WHEN t.remark='333' THEN t.val_b ELSE 0 END 333_b,
       CASE WHEN t.remark='444' THEN t.val_a ELSE 0 END 444_a,
       CASE WHEN t.remark='444' THEN t.val_b ELSE 0 END 444_b,
FROM table_name_a t

你需要在这里使用 MAX 和旋转逻辑,虽然你在正确的轨道上:

SELECT
    code,
    MAX(CASE WHEN remark = '111' THEN val_a END) 111_a,
    MAX(CASE WHEN remark = '111' THEN val_b END) 111_b,
    MAX(CASE WHEN remark = '222' THEN val_a END) 222_a,
    MAX(CASE WHEN remark = '222' THEN val_b END) 222_b,
    MAX(CASE WHEN remark = '333' THEN val_a END) 333_a,
    MAX(CASE WHEN remark = '333' THEN val_b END) 333_b,
    MAX(CASE WHEN remark = '444' THEN val_a END) 444_a,
    MAX(CASE WHEN remark = '444' THEN val_b END) 444_b
FROM table_name_a
GROUP BY
    code;

这里的逻辑是有效的,因为对于属于单个代码的每组记录,我们仅在特定条件下取最大值,在本例中为特定的备注值。如果条件为假,则 CASE 表达式将 return NULL,然后将被 MAX.

忽略