none
關於CASE 使用 IN的問題 RRS feed

  • 問題

  • 您好:

    如下語法

    我有參考 網路新增一個  dbo.fn_Split,可以拆字

    實際測過可用

    但當我 要於STORPROCE 內,去判斷 

    當@no ,沒有值,就 不要 有這一個dlvno 的篩選條件

         有值,就要撈 dlvno 的篩選條件

    但結果,卻顯示select  result 這一段 回傳 有多筆,無法過,  

    請問這該如何下?

    謝謝!

    select * from XX h
    where 1=1
    and h.dlvno in (
    		  case when @no='' THEN h.dlvno 
    			   ELSE ( SELECT result from  dbo.fn_Split(@splitter,@no)  )
    		  END

    2020年7月28日 上午 10:12

解答

  • 依照您的描述,首先你必須先確認這段的回傳結果,單獨傳入@no看看結果是否與你的預期相同,是否會只有回傳一筆資料。

    SELECT result from  dbo.fn_Split(@splitter,@no) 

    若回傳多筆資料但資料都相同,可以改寫fn_Split來或是用top 1來限制筆數就可以排除你遇到的錯誤訊息。

    只是這樣做是否符合你的邏輯,就得看你如何判斷了。



    | SQL PASS Taiwan Page | SQL PASS Taiwan Group

    | My Blog

    • 已標示為解答 softballnow 2020年9月5日 上午 08:44
    2020年7月29日 上午 06:56
    版主

所有回覆

  • 依照您的描述,首先你必須先確認這段的回傳結果,單獨傳入@no看看結果是否與你的預期相同,是否會只有回傳一筆資料。

    SELECT result from  dbo.fn_Split(@splitter,@no) 

    若回傳多筆資料但資料都相同,可以改寫fn_Split來或是用top 1來限制筆數就可以排除你遇到的錯誤訊息。

    只是這樣做是否符合你的邏輯,就得看你如何判斷了。



    | SQL PASS Taiwan Page | SQL PASS Taiwan Group

    | My Blog

    • 已標示為解答 softballnow 2020年9月5日 上午 08:44
    2020年7月29日 上午 06:56
    版主
  • 您好:

    單筆可過,但

    就是因為或分拆多筆,成一個TBALE

    一般 XX in (  select col from TBAle )

    可以過,但這邊CASE 後卻無法過

    謝謝

    and h.dlvno in (
    		  case when @no='' THEN h.dlvno 
    			   ELSE ( SELECT result from  dbo.fn_Split(@splitter,@no)  )
    		  END

    2020年7月29日 下午 12:43