2013-01-08 38 views
0

我以前在這裏得到過很好的幫助,所以我希望有人能幫我弄清楚。任何人都可以告訴我爲什麼查詢#1導致錯誤「子查詢返回超過1個值...」但查詢#2工作正常嗎?由於我使用「IN」而不是「=」來限定結果,因此我認爲多個值是可以接受的。查詢錯誤「子查詢返回的值超過1 ...」不應該「IN」解決這個問題嗎?

有關我如何完成此任務的任何建議?

--Query #1 
SELECT _Column1_ from _View1_ 
WHERE 
_Column2_ IN(CASE 
WHEN ISNUMERIC(1000110) = 1 AND LEN(1000110) > 3 
THEN (
SELECT _Column2_ 
FROM _Table1_ 
WHERE _Column2_ = CONVERT(Int, LEFT(1000110, 4)) 
OR  _Column3_ = CONVERT(Int, LEFT(1000110, 4)) 
) 
WHEN ISNUMERIC(1000110) = 1 AND LEN(1000110) <= 3 
THEN 0 
ELSE (SELECT _Column2_ from _Table1_) 
END) 

注:在最終的查詢,1000110實際上是一個用戶名變量可以返回一個數字的用戶名或字母數字

--Query #2 
WHEN ISNUMERIC(1000110) = 1 AND LEN(1000110) > 3 
THEN CONVERT(Int, LEFT(1000110, 4)) 
WHEN ISNUMERIC(1000110) = 1 AND LEN(1000110) <= 3 
THEN 0 
ELSE (SELECT _Column2_ from _Table1_) 
END) 

回答

2

SELECT _Column2_ from _Table1_最有可能返回多個resuluts。在這種情況下,只允許一個單一的值。

作爲測試嘗試SELECT TOP(1) _Column2_ from _Table1_

+0

是,選擇頂(1)將修復的錯誤,但省去查詢的目的。我需要讓CASE子句返回所有匹配的記錄,這就是爲什麼我要使用IN而不是=。任何想法如何實現相同的結果? – jgiven

+0

您正在使用子查詢作爲CASE語句結果的一部分,該結果只能返回標量值(因此在技術上您可以用=替換IN)。如果要從子查詢中返回多個結果 - 必須將它加入主查詢中,如 'SELECT _View1 _._ Column1_, CASN when ISNUMERIC(1000110)= 1 AND LEN(1000110)> 3 THEN 0 ELSE _Table1 _._ Column2_ from _View1_ INNER JOIN _Table1_ ON [一些常見列]' –

+0

我現在看到使用CASE消除了IN功能。我想我將不得不尋找另一種方法來解決我的特定問題,但是您提供的選項絕對有幫助。謝謝! – jgiven

相關問題