2015-04-20 2 views
0

Мне нужна была помощь с вопросом и что было бы самым чистым способом сделать это в SQL SERVER.SQL Server WHEN и подзапросы

Я в основном пишу запрос, который проверяет, находится ли номер клиента внутри другого подзапроса, тогда он должен вернуть servicename для этого номера клиента. Это моя попытка, и она не работает.

У вас есть предложения?

CASE WHEN aa.cust_no in (SELECT Cust_no FROM #Tabl1) THEN (SELECT ServiceName FROM #Tabl1) END AS Target 
+2

Ваша попытка - это утверждение, которое начинается с 'when', что недопустимо в SQL. Измените свой вопрос и покажите запрос. Кроме того, пометьте вопрос с помощью базы данных, которую вы используете. –

+0

Я понимаю, что это единственная часть, с которой мне нужна помощь, и это не работает. Я не могу показать весь код, поскольку он содержит более 300 строк кода. –

+0

Используйте что-то вроде CASE КОГДА ... ТОГДА от A LEFT JOIN B – Mihai

ответ

2

Я получаю то, что вы пытаетесь сделать, но ваш синтаксис необходимо изменить. Вы можете попробовать LEFT JOIN.

Этот запрос даст вам представление о том, что ваше заявление должно выглядеть

Select tabl1.ServiceName Target 
From SomeTable aa 
Left Join #Tabl1 tabl1 
    On aa.cust_no = tabl1.Cust_no 

Если вы хотите поставить что-то другое, если совпадение не найдено в #Tabl1, то вам нужно будет использовать WHEN, или COALESCE.

When tabl1.ServiceName Is NOT NULL Then tabl1.ServiceName Else 'Unknown Target' End

ИЛИ

Coalesce (tabl1.ServiceName, 'Unknown Target') Target

1

вместо case выражения пытаются выбрать ServiceName таким образом:

SELECT 
    (SELECT TOP 1 ServiceName FROM #Tabl1 where Cust_no = aa.cust_no) AS Target 
FROM ... 
0

Я думаю, Юр отсутствует один параметр выглядеть

CASE Expression 
    WHEN Value1 THEN Result1 
    WHEN Value2 THEN Result2 
    ELSE Alternative 
END 

Я надеюсь, что это может помочь ...

CASE aa.cust_no 
WHEN (SELECT Cust_no FROM #Tabl1 WHERE #Tabl1.cust_no) THEN (SELECT ServiceName FROM #Tabl1 WHERE #Tabl1.cust_no) 
    ELSE 'NO ServiceName' 
END AS Target 
0

Я считаю, что это должно получить то, что вы ищете.

SELECT serviceName 
FROM table_A 
WHERE cust_no IN (
     SELECT cust_no 
     FROM table_B 
     ); 
Смежные вопросы