DENSE_RANK 失败?

问题描述 投票:0回答:1

密集排名工作几乎完美,(25,000+条记录中的99.9%),但我在结果中发现了一个失败的案例

SELECT        cns_pid, cns_bid, Dense_rank() OVER (partition BY cns_pid
ORDER BY cns_bid) AS BUILD_NUM, cns_sect_num

FROM            real_prop.constrcom
WHERE        cns_bid > 0

UNION
SELECT        cns_pid, cns_bid, Dense_rank() OVER (partition BY cns_pid
ORDER BY cns_bid) AS BUILD_NUM, cns_sect_num

FROM            real_prop.constrres
WHERE        cns_bid > 0

ORDER BY cns_pid

我需要UNION,因为一些记录(cns_pid)在两个表(商业和住宅)中都有数据

这是我的结果屏幕截图,其中 DENSE_RANK 失败...

圈出的值应该是 2,但我不知道为什么不是。 我有一种感觉,因为这是两个表中都有 cns_bid 数据的少数记录之一。 不过,我不确定。 大家有什么想法吗?

sql sql-server
1个回答
0
投票

您可以

union
在子选择中进行两个选择,并对结果执行
Dense_rank

SELECT        cns_pid, cns_bid, Dense_rank() OVER (partition BY cns_pid
ORDER BY cns_bid) AS BUILD_NUM, cns_sect_num
FROM
(
    <your first select>
    UNION
    <your second select>
) t
ORDER BY cns_pid

确保在子选择查询中正确选择了外部选择中引用的列名称。

© www.soinside.com 2019 - 2024. All rights reserved.