Sql 在case when语句中选择子查询?否则怎么办?
这只是一个例子。(我的观点是,当我在案例陈述中得到不止一个结果时,我该怎么办):Sql 在case when语句中选择子查询?否则怎么办?,sql,database,scalar-subquery,Sql,Database,Scalar Subquery,这只是一个例子。(我的观点是,当我在案例陈述中得到不止一个结果时,我该怎么办): 选择 ,@PARAM作为id ,日期=( 选择不同的案例 当P.DATE1当前在日期为10时不起作用,因为它会匹配您的所有三个条件时,您需要删除上的= 选择不同的大小写 日期10时 然后“Z” 结束 您的子查询正在返回多行。您需要通过筛选或向其中添加前1,将其修改为返回一行和一列。例如: ,Date=( SELECT distinct CASE WHEN P.DATE1 <= 05 and P.DATE
选择
,@PARAM作为id
,日期=(
选择不同的案例
当P.DATE1当前在日期为10时不起作用,因为它会匹配您的所有三个条件时,您需要删除
上的=
选择不同的大小写
日期<10时
然后是“X”
当日期=10时
然后是“Y”
当日期>10时
然后“Z”
结束
您的子查询正在返回多行。您需要通过筛选或向其中添加前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 <<
)
,日期=(
选择不同的案例
当下午1点10分
然后“Z”
(完)
这种情况下,仅定义每行中要返回的值,而不是用单个值替换多行。您可能不需要子选择/子查询,您可能只需要一个案例:
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
选择
,@PARAM作为id
,(案例
当P.DATE1时,没有“子查询”在您的示例中,您的问题中只有一个查询,子查询在哪里/子查询是什么。如果您希望任何人尝试帮助您,您需要提供更多的上下文。如果您给出一个示例和/或解释您想要的单词,那么我们可能知道您希望您的查询是什么。请阅读。这样做是可行的,因为它将始终计算为X
值10(请参阅).SQL Server使case
语句短路,因此将选择第一个匹配表达式,这意味着查询基本上无法工作,因为它不会返回10的所需值,即Y
这是查询生成的错误:子查询返回的值超过1。当子查询lows=,!=,=或当子查询用作表达式时。@BIProgrammer您需要在问题中包含所有代码
,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 )
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