根据下表,我如何只选择具有独特动物的行?
animal age location
-------------------------
zebra 4 africa --> return this row
owl 50 america --> return this row
owl 50 u.s.a
panda 9 china --> return this row
我的理解是,由于location
具有唯一的行,以下内容无效:
SELECT DISTINCT animal, age, location FROM table
答案 0 :(得分:2)
简短回答 - 这是不可能的,因为条件并不严格,你如何确定哪一行为#ow; owl"应该退回吗?
答案很长,只要添加一些条件,就可以选择与您的问题相近的内容,例如:
SELECT animal, MIN(age), MIN(location) FROM table
GROUP BY animal
在此查询中,我们选择了独特的动物以及年龄和位置的最小值,请注意 - 它并不意味着会出现具有此类值的行,例如:
animal1, 2, location1
animal1, 1, location2
此查询将选择:
animal1, 1, location1
答案 1 :(得分:1)
简短回答 - 可以使用子查询到分区表。我发现最好在MS SQL中创建一个定义分区查询的 View ,然后在SELECT
语句中调用该视图。
MS SQL 查看(例如vw_First_Animals)将是:
SELECT * FROM (
SELECT *, rn=row_number() OVER (PARTITION BY [animal] ORDER by [location]) FROM [dbo].[tblAnimals]
) x where rn = 1;
这使您的XL查询,
SELECT * FROM vw_First_Animals
如果您将ORDER BY
子句重新整形为视图,则可以更改唯一退货的递送顺序。
如果不通过简单的演示帮助我使用PARTITION表子查询this thread,我就会失职。