下面我有給我這個錯誤的查詢:子查詢的WHERE子句在CASE語句(使用)
Msg 512, Level 16, State 1, Line 5
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
我得到的錯誤從子查詢WHERE
子句。
當你看到'5,137'這將是一個變量取代它的地方。 而Select val FROM DB01.dbo.f_split('5,137',',')
將返回分隔值列表作爲結果。
另一件事我想是把('5','137')
代替(Select val FROM DB01.dbo.f_split('5,137',','))
但我得到一個錯誤的逗號5和137
任何想法之間?所有的幫助非常感謝。
select
@Total_Orders = sum(a11.ORDER_CNT)
from
a11
join
a12 on (a11.STORE_ID = a12.STORE_ID)
join
a13 on (a12.CLIENT_ID = a13.CLIENT_ID)
join
a14 on (a11.ACTIV_DATE_ID = a14.DATE_ID)
join
a15 on (a13.PARENT_ID = a15.PARENT_ID)
where
a15.PARENT_DESC = 'Vanilla'
AND a13.CLIENT_ID IN
(
CASE WHEN '5,137'<>'All'
THEN (Select val FROM DB01.dbo.f_split('5,137',','))
ELSE (a13.CLIENT_ID)
END
)
AND a14.DATE between CONVERT(char(10), '2015-12-27T00:00:00-05:00',126) and CONVERT(char(10), '2016-01-02T23:59:59-05:00',126)
group by a13.PARENT_ID
相比毫無意義您在這裏有許多問題。看看你的案例表達的第一個條件。字符串文字'5,137'將永遠不會等於字符串文字'全部',因此它沒有機會到達任何其他分支。然後你有一個拆分函數,大概會返回多行。這絕不會像你編碼那樣工作。它會使用哪個值?你爲什麼要提供一個硬編碼的字符串字面值並將其轉換爲varchar,然後隱式轉換爲a14.DATE的數據類型(我當然希望這是一個日期數據類型而不是varchar)。 –
他提到該字符串正在替換一個變量。我猜測在某些情況下,變量將等於'All' –
T-SQL中的CASE是一個**表達式**(如'a + b'),它只能返回**一個原子值** - 你不能使用它來有條件地執行整個代碼塊,也不能從它返回結果集 –