我有一个数字列表附加到两个单独的列,我想只返回两列的第一个“匹配”来获取该数据。我接近this回答,但它只适用于一个字段。我需要它来处理字段的组合。在我准备发布之前大约十秒钟。
这是一个示例表“Item”:
Item Color Area
Boat Red 1
Boat Red 2
Boat Blue 4
Boat Blue 5
Car Red 3
Car Red 4
Car Blue 10
Car Blue 31
返回的结果集应为:
Item Color Area
Boat Red 1
Boat Blue 4
Car Red 3
Car Blue 10
答案 0 :(得分:2)
更简单的方法:
select Item,
Color,
min(Area) as Area
from Item
group by Item
Color
答案 1 :(得分:2)
只需将MIN
功能与GROUP BY
一起使用。
SELECT Item, Color, MIN(area) AS Area
FROM Item
GROUP BY Item, Color
输出:
Item Color Area
Boat Blue 4
Boat Red 1
Car Blue 10
Car Red 3
答案 2 :(得分:1)
SQL表代表无序集。因此,如果没有指定排序的列,则没有任何“第一”。
对于您的示例结果,最简单的查询是:
select item, color, min(area) as area
from item i
group by item, color;
答案 3 :(得分:0)
在我准备发布问题之前大约十秒钟,我意识到了答案:
WITH summary AS (
SELECT i.item + ':' + i.color,
a.area,
ROW_NUMBER() OVER(PARTITION BY i.item + ':' + i.color,
ORDER BY i.item + ':' + i.color DESC) AS rk
FROM Item i
group by (i.item + ':' + i.color, i.Area)
SELECT s。* 来自摘要 在哪里s.rk = 1
就像将两个复合关键字段组合成一个字段并基于该字段进行分组一样简单。这可能有点hackish所以如果有人想建议一个更好的选择,我就是为了它。