我正在使用 SQL Server 2008,我陷入了这个恶性循环DISTINCT
and GROUP BY
我有以下虚拟表myTable
:
ID Street City PostalCode ProjectID Date NameId
1 Bar Street Sunny Beach 666 7 25/08/2013 111
2 Sin Street Ibiza 999 5 12/06/2013 222
3 Bar Street Sunny Beach 666 7 07/08/2013 333
4 Bora Bora Bora Bora 1000 10 17/07/2013 444
5 Sin Street Ibiza 999 5 04/07/2013 555
我想获取具有不同地址(街道、城市、邮政编码)和项目 ID 的所有记录(可能是第一次出现)。
例如这里的结果应该是:
ID Street City PostalCode ProjectID Date NameId
1 Bar Street Sunny Beach 666 7 25/08/2013 111
2 Sin Street Ibiza 999 5 12/06/2013 222
4 Bora Bora Bora Bora 1000 10 17/07/2013 444
我尝试过DISTINCT
在所有列上,但这行不通,因为ID
是唯一的并且始终返回所有列。也尝试过Group by Street, City PostalCode ProjectID
,但是发生了一个错误Date
and NameId
.
Column '' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
那么,如何获得列子集不同的结果呢?
您想使用row_number()
功能:
select t.ID, t.Street, t.City, t.PostalCode, t.ProjectID, t.Date, t.NameId
from (select t.*,
row_number() over (partition by Street, City, PostalCode, ProjectId
order by id
) as seqnum
from t
) t
where seqnum = 1;
这是一个窗口函数,它将连续值分配给某些列中具有相同值的行(由partition by
条款)。这些行中的顺序由order by
条款。在这种情况下,它从最低的开始排序id
在组中,因此外部查询只选择第一个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)