显示 SELECT 中子查询的值
Display Value from Sub Query in 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')
想到横向连接:
SELECT p.id, p.referencia, 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'
您的查询过于复杂。
您使用子查询通过 IN
谓词过滤数据,但 select 与您传递给子查询过滤器的相同 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,
p.referencia,
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 中显示值 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')
想到横向连接:
SELECT p.id, p.referencia, 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'
您的查询过于复杂。
您使用子查询通过 IN
谓词过滤数据,但 select 与您传递给子查询过滤器的相同 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,
p.referencia,
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'