条件SQL语句DB2基于列

时间:2016-08-03 16:21:58

标签: sql jdbc db2 ibm-midrange

我不确定这是否可行,我有一个运行给定查询(JDBC)的java程序,并将结果输出到excel文件中。连接/ db信息是IBM as400,V7R1M0。

我们说我有以下表格:

 ====================    =================================
 |      TABLE1      |    |             TABLE2            | 
 ====================    =================================   
 | Company |  CODE  |    |  ID   | CODE1 | CODE2 | CODE3 |
 --------------------    --------------------------------
 |   001   |   E1   |    |   1   |  10   |  18   |   21  |
 |   005   |   E3   |    |   2   |  14   |  19   |   23  |
 |   009   |   E1   |    |   3   |  17   |  20   |   25  |   
 |   015   |   E2   |    |   4   |   5   |  11   |   15  |
 ====================    ================================= 

我的预期结果如下:

==============================
           RESULTS
==============================
|  Company  |  CODE  | CODE3 |
------------------------------
|    005    |   E3   |   21  |
==============================

注意:

  
      
  • TABLE1.CODE将告诉我们TABLE2中的哪一列可供选择。
  •   
  • TABLE1.COMPANY的代码随机更改
  •   
  • 我只需要TABLE2中的一行,假设ID = 1。
  •   

我不确定如何处理这个问题。我读到IBM AS400不允许IF ... ELSE.

我的想法有点像(伪代码):

SET Value = SELECT CODE FROM TABLE1 WHERE Company ='005'
IF Value = 'E1'
   SELECT CODE1 FROM TABLE1 WHERE ID = 1;
ELSE IF Value = 'E2'
   SELECT CODE2 FROM TABLE1 WHERE ID = 1;
...

修改

我知道我可以用Java做到这一点。但我不想改变它。可以从SQL语句中完成吗?

2 个答案:

答案 0 :(得分:3)

您可以将其表达为SQL查询:

select t1.company, t1.code,
       (case when t1.code = 'E1' then t2.code1
             when t1.code = 'E2' then t2.code2
             when t1.code = 'E3' then t2.code3
        end) as t1_code
from table1 t1 join
     table2 t2
     on t2.id = 1;

答案 1 :(得分:1)

Select a.Company, a.Code, 
    case a.Code
        when 'E1' then b.Code1
        when 'E2' then b.Code2
        when 'E3' then b.Code3
      end 
From table1 a
   join table2 b on b.Id = 1
Where c.Company ='005'