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<>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 单行子查询返回多于一行的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server存储过程:if variable = X,case where statement
带有子查询的PHP Prepared Statement变量绑定错误