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)
是,選擇頂(1)將修復的錯誤,但省去查詢的目的。我需要讓CASE子句返回所有匹配的記錄,這就是爲什麼我要使用IN而不是=。任何想法如何實現相同的結果? – jgiven
您正在使用子查詢作爲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 [一些常見列]' –
我現在看到使用CASE消除了IN功能。我想我將不得不尋找另一種方法來解決我的特定問題,但是您提供的選項絕對有幫助。謝謝! – jgiven