2014-05-12 3 views
1

У меня есть таблица ссылочных данных, содержащая столбцы как коды и значения.Поиск перестановок столбцов в SQL

См., Например, существует три типа кода, а именно: А, В, С.

В таблице, как показано ниже:

Code  Value 
--------------------- 
A1  a_one 
A2  a_two 
B1  b_one 
B2  b_two 
B3  b_three 
C1  c_one 
C2  c_two 
C3  c_three 
C4  c_four 
--------------------- 

У меня есть требование, где вход будет типами коды и вывод должен быть все перестановками между типами ввода кода.

См., Например, если типы входных кодовых А и С, выход моей SQL должен быть:

col_1  col_2 
--------------------- 
A1  C1 
A1  C2 
A1  C3 
A1  C4 
A2  C1 
A2  C2 
A2  C3 
A2  C4 
--------------------- 

Аналогично, если типы ввода кода является А, В, С, выход SQL будет иметь три колонки со всеми перестановки между A, B, C, а именно. A1 B1 C1-A2 B3 C4.

Я понятия не имею, как начать с этого. Поэтому любые подсказки будут полезны.

Спасибо за чтение!

+0

Я не понимаю, откуда взялись цифры. Вы говорите, что если входные сигналы A и C, один из выходов A2, C4. Почему не наоборот, A4, C2? Можете ли вы уточнить? – Lennart

+0

@ Lennart Я думаю, что он хочет сделать динамическую группу колонок на входе. Если это так, то утверждение IF-ELSE в столбце выбора является решением для этого. –

ответ

0

Если я правильно понимаю ваш вопрос, это один из тех редких случаев, когда CROSS JOIN на самом деле то, что вы хотите. A CROSS JOIN даст вам Cartesian product двух наборов, что означает все возможные комбинации между значениями в этих наборах.

Пример:

  • Таблица А с колонкой 1 содержит значение 'A' и 'B'
  • Таблицы B с колонкой 2 содержит значение 'C' и 'D'

The Ниже CROSS JOIN запроса (обратите внимание, что нет «условия соединения» указано, на цели):

SELECT * 
FROM A 
CROSS JOIN B 
будет

возвращает следующий результат:

1 2 
-------- 
a c 
a d 
b c 
b d 

Я создал SQL Fiddle, чтобы показать вам возможное решение. Вы можете немного настроить его, чтобы убедиться, что это то, что вам нужно. (Обратите внимание, что это скрипт Oracle, так как нет опции DB2.)

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