我使用的是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
客户编号 | 结构 | >orderDesc | |
---|---|---|---|
789 | 围栏 | 006 | 油漆|
789 | 房屋 | 004油漆 | [/tr>