我在下面的查询中给出了这个错误:
Msg 512,Level 16,State 1,Line 5
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
我从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
答案 0 :(得分:2)
CASE
表达式只能返回单个标量值。将两条腿和我们分开OR
:
AND ('5,137' = 'All'
OR a13.CLIENT_ID IN (Select val FROM DB01.dbo.f_split('5,137',',')))
答案 1 :(得分:0)
CASE
在过程语言中不像if
那样有效。 CASE
仅返回单个值。因此,您必须按照以下方式重写WHERE
子句:
WHERE ('5,137'<>'All'
AND a13.CLIENT_ID IN (Select val FROM DB01.dbo.f_split('5,137',',')))
OR '5,137'='All'
我希望我理解正确'5,137'
是一个占位符,它将填入不同的值。否则将它与'All'