如果除一列之外的所有值都相等,则显示一行
Show one row if all values except one column are equal
我通常会按产品显示订单的运输状态。但是当除 'item' 之外的所有值都相同时,我只希望显示一行(哪一行无关紧要)。我尝试了 SELECT DISTINCT
和 GROUP 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
我通常会按产品显示订单的运输状态。但是当除 'item' 之外的所有值都相同时,我只希望显示一行(哪一行无关紧要)。我尝试了 SELECT DISTINCT
和 GROUP 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