首页 > 解决方案 > 我想在 SQL 选择语句中唯一标识每个列值,而不使用某些序列显示实际数据

问题描述

例如:我有一张桌子BILL_PRODUCT

product_vendor_id| product_site_id| type_of_product |
123              | 901            | Car
123              | 901            | Tyre
123              | 902            | Bike
124              | 801            | skateboard
123              | 901            | Car
.
.
.

产品vendor_idproduct_site_id 有一对多的关系。

我想写一个类似的选择语句

select product_vendor_id,product_vendor_site_id,type_of_product, count(1)
from PRODUCT where product_type is not hull
group by product_vendor_id,product_vendor_site_id,type_of_product
order by product_vendor_id,product_vendor_site_id;

在这里得到计数。但在我的选择语句中,我不希望我的product_vendor_idandproduct_site_id直接可见。我希望数据采用这种格式

product_vendor_id| product_site_id| type_of_product |count 
  1                    1               car              2
  1                    1               tyre             3
  1                    2               bike             5
  2                    1               skateboard       1
  .                     
  .

你能帮我写 SELECT 查询吗?

标签: sqloracle

解决方案


一种dense_rank()用于生成新 ID 的选项:

select 
    dense_rank() over(order by product_vendor_id) new_product_vendor_id,
    dense_rank() over(order by product_site_id) new_product_site_id, 
    product_type,
    count(*) 
from product 
where product_type is not hull 
group by product_vendor_id, product_site_id, product_type

推荐阅读