如果没有其他条件或什么都不做,SQL查询是否有效?

时间:2019-11-27 08:19:41

标签: sql oracle pivot case-when

假设我在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

1 个答案:

答案 0 :(得分:3)

尽管您在正确的轨道上,但您仍需要在此处使用yourImageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //open or close your drawer according to your need } }); 和透视逻辑:

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,然后NULL将忽略它。