2015-12-10 2 views
0

У меня есть запрос, который вытягивает имя драйвера и номера клемм здесь:DB2: Нужна помощь по делу/КОГДА

SELECT UNIQUE D.DRIVER_ID, D.NAME, 
CASE 
WHEN TERMINAL_NUMBER = '0' THEN 'LITHONIA' 
WHEN TERMINAL_NUMBER = '1' THEN 'MONTGOMERY' 
WHEN TERMINAL_NUMBER = '2' THEN 'BOWLING GREEN' 
WHEN TERMINAL_NUMBER = '4' THEN 'OOLTEWAH' 
WHEN TERMINAL_NUMBER = '40' THEN 'LEXINGTON SOUTH' 
WHEN TERMINAL_NUMBER = '41' THEN 'DURHAM' 
WHEN TERMINAL_NUMBER = '42' THEN 'LEXINGTON' 
WHEN TERMINAL_NUMBER = '43' THEN 'OKC' 
WHEN TERMINAL_NUMBER = '46' THEN 'STEVENSON' 
WHEN TERMINAL_NUMBER = '47' THEN 'TUPELO' 
WHEN TERMINAL_NUMBER = '48' THEN 'HUMBOLDT' 
WHEN TERMINAL_NUMBER = '49' THEN 'MURFREESBORO' 
WHEN TERMINAL_NUMBER = '5' THEN 'JEFFERSON CTIY' 
WHEN TERMINAL_NUMBER = '50' THEN 'LEWISBURG' 
WHEN TERMINAL_NUMBER = '52' THEN 'SAVANNAH' 
WHEN TERMINAL_NUMBER = '54' THEN 'FRANKLIN' 
WHEN TERMINAL_NUMBER = '6' THEN 'JACKSONVILLE' 
WHEN TERMINAL_NUMBER = '75' THEN 'VIRGINIA' 
WHEN TERMINAL_NUMBER = '8' THEN 'ATHENS' 
WHEN TERMINAL_NUMBER = '9' THEN 'LATTA' 
WHEN OTHER_CODE = 'COL' THEN 'COLOMBUS' 
END AS TERM 
FROM DRIVER D 
WHERE D.ACTIVE_IN_DISP = 'True' 
ORDER BY DRIVER_ID, term 

Однако, мне нужно, чтобы иметь colombus быть свой собственный столбец «term», то только проблема заключается в драйверах, которые могут иметь другие code = 'col', также находятся в терминале 0.

Как мне переписать этот запрос, чтобы продемонстрировать это?

return results

drivers whose other_code = col

+0

хорошо, что фактические правила. вы хотите, чтобы other_code переместился на terminal_number или вы хотите иметь два столбца ... непонятно, что именно вы хотите. – Hogan

+0

Ну, я не знал, как я могу это сделать, чтобы другой_код перешел на терминал? – OVO

+0

Опубликуйте свои данные образца (охватывающие все возможные случаи) и требуемый результат. –

ответ

2

Это лучший способ такого рода перевод - я делаю «временную» таблицу с VALUES заявлением, а затем присоединиться к этой таблице. Я думаю, это дает понять, как эти данные могут быть сохранены в таблице, которая будет лучше.

SELECT UNIQUE D.DRIVER_ID, D.NAME, TERMLIST.NAME AS TERM 
FROM DRIVER D 
LEFT JOIN (
    VALUES 
    ('0' , 'LITHONIA' ), 
    ('1' , 'MONTGOMERY'), 
    ('2' , 'BOWLING GREEN'), 
    ('4' , 'OOLTEWAH'), 
    ('40', 'LEXINGTON SOUTH'), 
    ('41', 'DURHAM'), 
    ('42', 'LEXINGTON'), 
    ('43', 'OKC'), 
    ('46', 'STEVENSON'), 
    ('47', 'TUPELO'), 
    ('48', 'HUMBOLDT'), 
    ('49', 'MURFREESBORO'), 
    ('5' , 'JEFFERSON CTIY'), 
    ('50', 'LEWISBURG'), 
    ('52', 'SAVANNAH'), 
    ('54', 'FRANKLIN'), 
    ('6' , 'JACKSONVILLE'), 
    ('75', 'VIRGINIA'), 
    ('8' , 'ATHENS'), 
    ('9' , 'LATTA') 
) TERMLIST ON TERMLIST.TN = D.TERMINAL_NUMBER 
WHERE D.ACTIVE_IN_DISP = 'True' 
ORDER BY D.DRIVER_ID, TERMLIST.NAME 

Для вашего специального требования о двух значениях мы делаем это:

SELECT UNIQUE D.DRIVER_ID, D.NAME, 
    CASE WHEN D.TERMINAL_NUMBER = '0' AND D.OTHER_CODES = 'COL' THEN 'COL' 
      ELSE TERMLIST.NAME END AS TERM 
FROM DRIVER D 
LEFT JOIN (
    VALUES 
    ('0' , 'LITHONIA' ), 
    ('1' , 'MONTGOMERY'), 
    ('2' , 'BOWLING GREEN'), 
    ('4' , 'OOLTEWAH'), 
    ('40', 'LEXINGTON SOUTH'), 
    ('41', 'DURHAM'), 
    ('42', 'LEXINGTON'), 
    ('43', 'OKC'), 
    ('46', 'STEVENSON'), 
    ('47', 'TUPELO'), 
    ('48', 'HUMBOLDT'), 
    ('49', 'MURFREESBORO'), 
    ('5' , 'JEFFERSON CTIY'), 
    ('50', 'LEWISBURG'), 
    ('52', 'SAVANNAH'), 
    ('54', 'FRANKLIN'), 
    ('6' , 'JACKSONVILLE'), 
    ('75', 'VIRGINIA'), 
    ('8' , 'ATHENS'), 
    ('9' , 'LATTA') 
) TERMLIST ON TERMLIST.TN = D.TERMINAL_NUMBER 
WHERE D.ACTIVE_IN_DISP = 'True' 
ORDER BY D.DRIVER_ID, TERMLIST.NAME