如果除一列之外的所有值都相等,则显示一行

Show one row if all values except one column are equal

我通常会按产品显示订单的运输状态。但是当除 'item' 之外的所有值都相同时,我只希望显示一行(哪一行无关紧要)。我尝试了 SELECT DISTINCTGROUP BY 但对于两者我都需要排除 'item' 列。

| item | status  | ship_date  | est_ship_date | order_num | tracking_number |
-----------------------------------------------------------------------------
| abc  | Shipped | 2020-06-01 | 2020-06-01    | 123       | xyz             |
| cde  | Shipped | 2020-06-01 | 2020-06-01    | 123       | xyz             |
| efg  | Shipped | 2020-06-01 | 2020-06-01    | 123       | xyz             |

我尝试过的:

SELECT DISTINCT item, status, ship_date, est_ship_date, order_num, tracking_number 
from orders
where order_num = 123

我知道如果我排除项目我会得到一行但我必须保留它。我不能排除 'item'

您可以使用 row_number():

select *
from (
    select 
        t.*,
        row_number() over(
            partition by status, ship_date, est_ship_date, order_num, tracking_number
            order by item
        ) rn
    from mytable t 
) t
where rn = 1

(status, ship_date, est_ship_date, order_num, tracking_number) 上存在重复项时,这会为您提供具有最小 item 的行。

另一种选择是聚合(之所以有效,是因为您只排除了一列):

select status, ship_date, est_ship_date, order_num, tracking_number, min(item) item
from mytable
group by status, ship_date, est_ship_date, order_num, tracking_number