Select Case Statement 单行子查询返回多于一行

Posted

技术标签:

【中文标题】Select Case Statement 单行子查询返回多于一行【英文标题】:Select Case Statment single-row subquery returns more than one row 【发布时间】:2015-05-29 12:00:34 【问题描述】:

只需要返回来自 Then 的值,但我的查询返回更多 1s

    SELECT
CASE  WHEN S.ITEM_ID<>0 THEN 1
END AS "UomLevelEditable"
FROM BIZZXE_V2_SCH.PO_REQUEST_ITEMS S WHERE S.ITEM_Id =209 AND S.UOM_ID= 55

【问题讨论】:

子查询在哪里? 选择独特的案例.... 还有 item_id + uom_id 必须是唯一的,或者是表中的两个之一 那么表格中有不止一行满足这些条件,更重要的是,如果 Where 条件指定了带有S.ITEM_Id =209 的行,那么您在选择案例WHEN S.ITEM_ID&lt;&gt;0 中的条件将始终满意。 感谢“UNIQUE”关键字解决的问题 【参考方案1】:

如果你想要正好一行,那么使用聚合:

SELECT MAX(CASE WHEN S.ITEM_ID <> 0 THEN 1 END) AS "UomLevelEditable"
FROM BIZZXE_V2_SCH.PO_REQUEST_ITEMS S
WHERE S.ITEM_Id = 209 AND S.UOM_ID = 55;

如果您希望最多一行,请使用rownum = 1

SELECT (CASE WHEN S.ITEM_ID <> 0 THEN 1 END) AS "UomLevelEditable"
FROM BIZZXE_V2_SCH.PO_REQUEST_ITEMS S
WHERE S.ITEM_Id = 209 AND S.UOM_ID = 55 AND rownum = 1;

【讨论】:

【参考方案2】:

我认为这可能对你有帮助,我在下面使用了 Distinct。

   SELECT
DISTINCT CASE  WHEN S.ITEM_ID<>0 THEN 1
END AS "UomLevelEditable"
FROM BIZZXE_V2_SCH.PO_REQUEST_ITEMS S WHERE S.ITEM_Id =209 AND S.UOM_ID= 55

【讨论】:

@Beez 请为答案投票,以便对其他人也有帮助。

以上是关于Select Case Statement 单行子查询返回多于一行的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE:使用 CASE-WHEN-STATE 的结果

SQL Server存储过程:if variable = X,case where statement

Go_select

带有子查询的PHP Prepared Statement变量绑定错误

ORA-01427: 单行子查询返回多于一行 ,,WHEN USING SELECT COUNT

使用 case 语句从 SELECT 更新记录。 (mysql)