它只是一个例子。 (我的观点是,当我在CASE声明中获得多于一个结果时,我该怎么办):
SELECT
,@PARAM AS id
,Date=(
SELECT distinct CASE
WHEN P.DATE1 <= 05 and P.DATE2 <= 10
THEN 'X'
WHEN P.DATE1 > 05 and P.DATE2 <= 10
THEN 'Y
WHEN P.DATE2 > 10
THEN 'Z'
END )
FROM Prod AS P
错误如下:
子查询返回的值超过1。子查询遵循=,!=,&lt;,&lt; =,&gt;,&gt; =或子查询用作表达式时不允许这样做**
答案 0 :(得分:1)
您的子查询返回了几行。您需要将其修改为返回单行,使用单个列,通过过滤或向其添加TOP 1。例如:
,Date=(
SELECT distinct CASE
WHEN P.DATE1 <= 05 and P.DATE2 <= 10
THEN 'X'
WHEN P.DATE1 > 05 and P.DATE2 <= 10
THEN 'Y
WHEN P.DATE2 > 10
THEN 'Z'
END
WHERE -- >> your filter here <<
)
或
,Date=(
SELECT TOP 1 distinct CASE
WHEN P.DATE1 <= 05 and P.DATE2 <= 10
THEN 'X'
WHEN P.DATE1 > 05 and P.DATE2 <= 10
THEN 'Y
WHEN P.DATE2 > 10
THEN 'Z'
END )
仅在每行中定义要重新记录的值时的情况,而不是用单个值替换多个行。
答案 1 :(得分:1)
你可能不想要一个子选择/子查询,你可能只想要一个案例:
SELECT
,@PARAM AS id
,(CASE
WHEN P.DATE1 <= 05 and P.DATE2 <= 10
THEN 'X'
WHEN P.DATE1 > 05 and P.DATE2 <= 10
THEN 'Y
WHEN P.DATE2 > 10
THEN 'Z'
END) AS Date
FROM Prod AS P
您的错误是因为Date = (SELECT ...)
执行查询(每行P)并且必须只有一列,并且返回的行设置为Date。
答案 2 :(得分:0)
如果日期为10,因为它符合您的所有三个条件,目前无法正常工作,您需要删除=
和<
上的>
。< / p>
SELECT DISTINCT CASE
WHEN Date < 10
THEN 'X'
WHEN Date = 10
THEN 'Y'
WHEN Date > 10
THEN 'Z'
END