我收到了错误
“ORA-01427:单行子查询返回多行01427. 00000 - ”单行子查询返回多行“
因为下面的case语句返回两条记录。它不会返回两个记录,如果它可以从a.STRUCT_DOC_id
条款中引用相同的where
,这是较大的select
的一部分。
子查询返回两个记录,但如果它引用了a.STRUCT_DOC_id
,它是较大查询的一部分,它只会引入一条记录。
SELECT DISTINCT a.STRUCT_DOC_id,
CASE WHEN Inclusions.Wound_Included = 'TRUE'
THEN (SELECT min_value
FROM etIndivCommitt b,
mn_structured_contract AA
WHERE b.STRUCT_DOC_id=AA.STRUCT_DOC_id AND
b.PP_Sub_Type like '%Wound%')
ELSE '0'
END Commitment_Value,
a.Product_ID
FROM
mn_structured_contract a
GetIndivCommitt b,
Inclusions C
WHERE
b.STRUCT_DOC_id=a.STRUCT_DOC_id
C.STRUCT_DOC_id=a.STRUCT_DOC_id
根据我的理解,你试图为“伤口”相关的记录返回一个字段的MIN
值。那是对的吗?如果是这样,您可以尝试这样的事情:
SELECT DISTINCT
src.STRUCT_DOC_id,
CASE
WHEN src.Wound_Included = 'TRUE' THEN src.MinValueForWoundIncluded
ELSE '0'
END Commitment_Value,
src.Product_ID
FROM (
SELECT
a.STRUCT_DOC_id,
a.Product_id,
C.Wound_Included,
MIN(
CASE
WHEN PP_Sub_Type LIKE '%wound%' THEN <whatever field you are getting the "min" of>
ELSE NULL
END) OVER(PARTITION BY a.Struct_DOC_id) AS MinValueForWoundIncluded -- Return the MIN value for each Struct_DOC_id
FROM mn_structured_contract a, GetIndivCommitt b, Inclusions C
WHERE b.STRUCT_DOC_id=a.STRUCT_DOC_id
AND C.STRUCT_DOC_id=a.STRUCT_DOC_id
) src
几点说明:
CASE
语句中的子查询中的连接与外部select中的连接相同(所有在STRUCT_DOC_id
上)<whatever field you are getting the "min" of>
的东西CASE
声明中,你有ELSE '0'
...如果你想返回一个数字字段,你应该摆脱单引号C
,但随后再次将其称为Inclusions.Wound_Included
。为别名设置别名后,您应该只通过别名引用它我没有测试过,但试一试让我知道:)