【问题标题】:Select Case Statment single-row subquery returns more than one rowSelect Case Statement 单行子查询返回多于一行
【发布时间】: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”关键字解决的问题

标签: sql oracle oracle11g


【解决方案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 请为答案投票,以便对其他人也有帮助。
    猜你喜欢
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多