1

假设我有包含以下数据的视图

Name      Image
----    ----------
 A         Image1
 A         Image2
 A         Image3
 B         Image4
 B         Image5

现在我想要的是为每个名称只选择一行,我只希望结果是这样的并不重要,例如:

Name      Image
----    ----------
 A         Image1
 B         Image4

另一种情况可能更接近我在这里需要的,如果我们建立一个销售产品的网站,每个产品都有多个图像,如何只选择一个图像作为封面显示(比如说第一个)。我使用了 Distinct 但它不起作用,因为每一行都有不同的图像。

谢谢,

拉沙

4

1 回答 1

2

对于您问题中的数据,可以进行简单的聚合:

select name, min(image)
from t
group by name

如果您有多个列并且想要同一个表中的所有行:

select t.*
from (select t.*,
             row_number() over (partition by name order by newid()) as seqnum
      from t
     ) t
where seqnum = 1;

row_number()函数为具有相同名称的所有行分配一个序号。order by newid()进行随机排序。

于 2013-05-22T13:47:41.070 回答