密集排名工作几乎完美,(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 数据的少数记录之一。 不过,我不确定。 大家有什么想法吗?
您可以
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
确保在子选择查询中正确选择了外部选择中引用的列名称。