2015-04-20 56 views
0

我需要一個問題的幫助,什麼是在SQL SERVER中這樣做的最乾淨的方法。SQL Server何時和子查詢

我基本上是編寫一個查詢,檢查客戶號碼是否在另一個子查詢內,然後它應該返回該客戶號碼的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 WHEN ... THEN from 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

OR

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 
     );