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