2014-11-28 6 views
0

У меня возникла проблема с решением SELECT CASE с помощью TOP.Обработка TOP в A CASE-WHEN-THEN

Должен ли я упоминать, что я совершенно новичок в этом вопросе? : D Также это мой первый пост в Stackoverflow. Здравствуй !

Я хочу, чтобы заполнить один столбец информаций из двух таблиц:

Таблица 1: Колонка 1 содержит данные, которые я хочу использовать

Таблица 1: Колонка 2 является объединение

Таблица 2: Колонка 1 содержит данные, которые я хочу использовать

Таблица 2: Колонка 2 является объединение

Итак:

Таблица 1 Столбец 1 содержит буквы (D M и T) и пустые пространства.

Таблица 2 Колонка 1 содержит слова («» Роллс «перенос», «Доставка»)

Я пытаюсь заполнить свою колонку, используя следующие условия:

  • Когда столбец содержит T1.C1 D, М или Т, написать DM или T.
  • Когда столбец T1.C1 пуст, смотреть на колонке T2.C1:
    • Если столбец содержит T1.C1 'Рулоны', пишут 'R'
    • El себе сделать что-нибудь

вещи получить уродливые очень быстро для меня не писать, потому что информация я хочу от колонки B требует TOP, который будет использоваться.

Это лучшее, что я мог получить, это Неверный синтаксис рядом с ключевым словом 'From'.

Вот мой код. Любые предложения?

SELECT 

(CASE T1.C1 
WHEN 'D' 
    THEN 'D' 
WHEN 'M' 
    THEN 'M' 
WHEN 'T' 
    THEN 'T' 
WHEN (SELECT TOP 1 T2.C1 FROM T2 WHERE T1.C2=T2.C2) 
    THEN 'R' 
ELSE 
    '' 
END) as my_data, 

FROM T1 
+1

Удалите запятую после 'my_data'. –

ответ

0

Я думаю, вы должны попытаться найти более простой способ, чтобы написать это, что-то вдоль линий:

WITH cte 
      AS (SELECT C1 , 
         C2 , 
         ROW_NUMBER() OVER (PARTITION BY C2 ORDER BY col) rn 
       FROM  Table2 
      ) 
    SELECT CASE WHEN T1.C1 = '' THEN LEFT(T2.C1, 1) 
       ELSE T1.C1 
      END AS my_data 
    FROM Table1 T1 
      LEFT OUTER JOIN cte T2 ON T1.C2 = T2.C2 
             AND T2.rn = 1 

Вы не вывешенные вашу схему таблицы, так что это, возможно, потребуется скорректировать ,

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