如何解决在SELECT中的子查询中显示值
我需要在SELECT中显示值MIN(pa.DataAdjudicacao)。 以及如何替换此子查询进行联接? 我该怎么做? 据我搜索,我还没有找到任何方法。 请帮忙。
SELECT p.id,p.referencia
FROM PCTSproposta p
WHERE p.ID in (SELECT pa.Proposta
FROM PropostaAdjudicada pa
WHERE pa.Proposta = p.ID
GROUP BY pa.Proposta
HAVING MIN(pa.DataAdjudicacao) >= '2020-10-01' And MIN(pa.DataAdjudicacao) <= '2020-10-31')
解决方法
您的查询过于复杂。
您可以使用子查询通过IN
谓词过滤数据,但是选择与传递到子查询过滤器中的ID
相同的数据。因此,您的IN
看起来像EXISTS
。
但是,如果需要该分钟数,则应使用JOIN
:
SELECT p.id,p.referencia,pa2.DataAdjudicacao
FROM PCTSproposta p
JOIN (
SELECT pa.Proposta,MIN(pa.DataAdjudicacao) as DataAdjudicacao
FROM PropostaAdjudicada pa
GROUP BY pa.Proposta
HAVING MIN(pa.DataAdjudicacao) BETWEEN date '2020-10-01'AND date '2020-10-31'
) pa2
on pa2.Proposta = p.ID
根据Id
列的角色(如果它是PCTSproposta
的主键),数据完整性和基数,可以将子查询合并到主查询中:
SELECT p.id,MIN(pa.DataAdjudicacao) as DataAdjudicacao
FROM PCTSproposta p
JOIN PropostaAdjudicada pa
on pa2.Proposta = p.ID
GROUP BY p.id,p.referencia
HAVING MIN(pa.DataAdjudicacao) BETWEEN date '2020-10-01'AND date '2020-10-31'
,
想到横向连接:
SELECT p.id,pa.*
FROM PCTSproposta p
CROSS APPLY (
SELECT MIN(pa.DataAdjudicacao) minDataAdjudicacao
FROM PropostaAdjudicada pa
WHERE pa.Proposta = p.ID
) pa
WHERE pa.minDataAdjudicacao >= '20201001' AND pa.minDataAdjudicacao < '20201101'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。