【问题标题】:Conditional SQL Statement DB2 Based on columnsDB2 基于列的条件 SQL 语句
【发布时间】:2016-12-09 11:48:14
【问题描述】:

我不确定这是否可行,我有一个运行给定查询 (JDBC) 并将结果输出到 Excel 文件的 java 程序。连接/数据库信息是 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语句完成吗?

【问题讨论】:

  • IF ... ELSE 是创建存储过程和函数时使用的 SQL 持久存储模块 (SQL/PSM) 标准的一部分。 CASE 在标准 SQL 查询中提供类似的功能。

标签: sql jdbc db2 ibm-midrange


【解决方案1】:

您可以将其表示为 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;

【讨论】:

    【解决方案2】:
    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'
    

    【讨论】:

      猜你喜欢
      • 2023-01-12
      • 2017-02-03
      • 2019-12-15
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      • 2020-04-06
      • 2021-06-20
      • 2021-12-09
      相关资源
      最近更新 更多