在多列上选择唯一的组合



我使用的是SQL Server 2012。我不能在多个列上选择distinct,并且我的权限有限。

有了这个样本数据

orderNum    CustomerNum OrderDesc   Structure
-------     ----------  --------    --------
001          456        repair      House
002          456        paint       House
003          678        repair      Fence
004          789        repair      House
005          789        paint       House
006          789        repair      Fence
007          789        paint       Fence

我想写一个查询来显示正在处理的每个唯一结构,即CustomerNum和structure的每个唯一组合。我不在乎一个结构是在喷漆还是在修理,或者两者兼而有之。

所以我正在寻找这样的结果:

orderNum    CustomerNum OrderDesc   Structure
-------     ----------  --------    --------
001          456        repair      House
003          678        repair      Fence
004          789        repair      House
006          789        repair      Fence

请注意,CustomerNum 789显示了两个orderNum,因为House和Fence都在处理中。但是,我不希望CustomerNum 788出现4次。

我所做的是选择*来自订单

然后粘贴到Excel中,并在选中CustomerNum和Structure的情况下删除重复项。但我相信,在没有Excel的情况下,一定有办法做到这一点。

您可以使用row_number():

select t.*
from (select t.*,
row_number() over (partition by customernum, structure order by ordernum) as seqnum
from t
) t
where seqnum = 1;

获取最小订单号、每个客户的最小订单描述和结构的简单方法。

DECLARE @table table(orderNum    char(3), CustomerNum int, OrderDesc varchar(10),  Structure varchar(10))
insert into @table values
('004',          789        ,'repair'      ,'House'),
('005',          789        ,'paint'       ,'House'),
('006',          789        ,'repair'      ,'Fence'),
('007',          789        ,'paint'       ,'Fence');
select customernum, structure, min(ordernum) AS ordernum, Min(OrderDesc) as orderDesc
from @table
group by customernum, structure
>油漆004[/tr>
客户编号结构orderDesc
789围栏006
789房屋油漆

最新更新