2016-08-03 6 views
0

Я не уверен, что это возможно, у меня есть Java-программа, которая запускает заданный запрос (JDBC) и выводит результаты в файл excel. Информация о соединении/db - IBM as400, V7R1M0.Условный SQL-запрос DB2 на основе столбцов

Скажем, у меня есть следующие таблицы:

==================== ================================= 
|  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's CODE изменяется случайным образом
  • Мне нужна только одна строка из 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; 
... 

EDIT

Я знаю, что могу сделать это в Java. но я не хочу его менять. Можно ли это сделать из инструкции SQL?

+0

'стандарты IF ... ELSE' является частью SQL Persistent Stored Modules (SQL/PSM), используемые при создании хранимых процедур и функций , 'CASE' обеспечивает аналогичную функциональность в стандартном SQL-запросе. – Charles

ответ

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; 
+0

Спасибо! это сработало – Shank

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' 
+0

Спасибо, ур тоже работал – Shank

Смежные вопросы