2015-03-16 3 views
0

У меня есть таблица с кодом столбца и другую скидка, как показано ниже:соответствие 1 колонка с другими 3 колонками

Klient | discount 
--------+----------- 
123  | 10 
232  | 5 
322  | 7 
451  | 2 

В другой таблице у меня есть уровни клиентского кода, как показано ниже:

Tier 1 | Tier2 | Tier3 
--------+-----------+-------- 
023  | 123  | 333 
232  | 311  | 455 

мне нужно что-то вроде это (Klient поле может быть в любом столбце уровня, поэтому должны проверить, где это ...)

Klient | discount | tier 
--------+---------------+--------- 
123  | 10   | 2 
232  | 5   | 1 

Я сделал это, выполнив три запроса append по той же таблице, изменив поле отношений (от klient до каждого уровня и удалив нули).

Но было интересно, если есть более прямой/эффективный способ ...

Спасибо за любую помощь!

+0

У меня была очень похожая проблема раньше, я знаю, что решение для mysql не совсем уверенно, если оно также работает для sql – nafas

+0

@nafas: это sql based? если бы вы могли опубликовать его, чтобы я мог попробовать? благодаря! – user2950162

+0

Прошу прощения, я неправильно понял вопрос. Я не совсем уверен, как получить уровень 1, 2 и т. Д. – nafas

ответ

1

Попробуйте это:

SELECT Tier1 AS Klient, 1 AS Tier 
FROM t2 
UNION ALL SELECT Tier2, 2 
FROM t2 
UNION ALL SELECT Tier3, 3 
FROM t2 

Это даст вам следующее:

Klient | Tier 
--------+------- 
023  | 1 
232  | 1 
123  | 2 
311  | 2 
333  | 3 
455  | 3 

Если сохранить этот запрос как q1, вы можете присоединиться к первой таблице:

SELECT Klient, Discount, Tier 
FROM q1 
INNER JOIN t1 ON q1.Kleint = t1.Klient 

NB. Есть ли какая-либо особая причина, почему ваша таблица имеет отдельный столбец для каждого уровня? В идеале, структура таблицы должна быть структурой запроса объединения, а разделение на столбцы должно выполняться с помощью запроса с перекрестной вкладкой.

+0

Я получил данные вроде этого .... у них есть это в 2 файлах excel, один для уровня 1 и один для другого 2 – user2950162

0

использовать этот подзапрос для преобразования уровня:

(SELECT tier1 k, 1 t FROM tiers 
UNION ALL 
SELECT tier2 k, 2 t FROM tiers 
UNION ALL 
SELECT tier3 k, 3 t FROM tiers) my_tiers 
Смежные вопросы