Sql server 如果除一列以外的所有值都相等,则显示一行
我通常显示订单的发货状态,按产品分类。但我只想在除“item”之外的所有值都相同的情况下显示一行(不管是哪一行)。我尝试了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 | ------------------------------------------------------------------------
选择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