[英]SQL DISTINCT Value Question
如何在查询中过滤结果? 例
我有5条记录
约翰·史密斯,苹果
简,DOE,苹果
弗雷德·詹姆斯,苹果
比尔·埃文斯,橙色
Willma,琼斯,葡萄
现在我想要一个查询,该查询将使用DISTINCT FRUIT带回3条记录,但是...这是棘手的部分,我仍然想要First Name,Last Name的列。 PS:我不在乎它返回的3个值中的哪个,但是我需要它仅返回3个(或返回多少个DISTINCT水果)。
退货将是
约翰·史密斯,苹果
比尔·埃文斯,橙色
Willma,琼斯,葡萄
在此先感谢,我整天都在努力。
奇怪的是,最好的解决方案不涉及GROUP BY。
WITH DistinctFruit AS (
SELECT
ROW_NUMBER() OVER (PARTITION BY Fruit ORDER BY LastName) AS FruitNo,
LastName,
FirstName,
Fruit
FROM table)
SELECT FirstName, LastName, Fruit
FROM DistinctFruit
WHERE FruitNo = 1;
如果数据量很少(没有成千上万的行),则可以执行子查询。
select distinct t1.fruit as Fruit,
(select top 1 t2.lastname
from t1 as t2
where t1.fruit = t2.fruit
order by t2.lastname) as LastName,
(select top 1 t2.firstname
from t1 as t2
where t1.fruit = t2.fruit
order by t2.lastname, t2.firstname) as FirstName
from t1
注意,FirstName列的排序方式与LastName列相同。 这将为您提供匹配的姓氏以及正确的名字。
这是我的测试数据:
create table t1
(firstname varchar(20),
lastname varchar(20),
fruit varchar(20))
insert into t1
values ('John','Smith','apple')
insert into t1
values ('Jane','Doe','apple')
insert into t1
values ('Fred','James','apple')
insert into t1
values ('Bill','evans','orange')
insert into t1
values ('Willma','Jones','grape')
只是另一个解决方案
select distinct x.*,fruit from t1
cross apply
(select top 1 firstname, lastname from t1 t2 where t1.fruit=t2.fruit) x
SELECT DISTINCT x.*,fruit FROM peopleFruit pf
CROSS APPLY
(SELECT TOP 1 firstname, lastname FROM peopleFruit pf1 WHERE pf.fruit=pf1.fruit) x
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.