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

Sql server 如果除一列以外的所有值都相等,则显示一行,sql-server,select,group-by,distinct,greatest-n-per-group,Sql Server,Select,Group By,Distinct,Greatest N Per Group,我通常显示订单的发货状态,按产品分类。但我只想在除“item”之外的所有值都相同的情况下显示一行(不管是哪一行)。我尝试了选择DISTINCT和GROUP BY,但对于这两种方法,我需要排除“项”列 | item | status | ship_date | est_ship_date | order_num | tracking_number | ------------------------------------------------------------------------

我通常显示订单的发货状态,按产品分类。但我只想在除“item”之外的所有值都相同的情况下显示一行(不管是哪一行)。我尝试了
选择DISTINCT
GROUP BY
,但对于这两种方法,我需要排除“项”列

| 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'

您可以使用
行编号()

上存在重复项时(状态、发货日期、预计发货日期、订单号、跟踪号)
,这将为您提供具有最小
项的行

另一个选项是聚合(它可以工作,因为您只排除一列):


第行中的表名是哪一个_number@EvikGhazarian:这是我的表格,谢谢。第一个选项仍然是返回多行
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
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