0

这只是一个例子。(我的意思是当我在 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 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的**

4

3 回答 3

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 )

仅定义每行中要返回的值的情况,而不是用单个值替换多行。

于 2015-01-27T15:03:30.253 回答
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 的每行)并且必须恰好返回一列和一行才能设置为日期。

于 2015-01-27T15:05:47.423 回答
0

如果 date 为 10,则当前将无法正常工作,因为它将符合您的所有三个条件,您需要删除and=上的.<>

SELECT DISTINCT CASE 
                WHEN Date < 10 
                THEN 'X'
                WHEN Date = 10 
                THEN 'Y'
                WHEN Date > 10 
                THEN 'Z'
                END
于 2015-01-27T14:39:02.500 回答