选择区别于视图

时间:2013-05-22 13:46:31

标签: sql sql-server select sqlcommand

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

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

现在我想要的是为每个名字只选择一行,这与我想要的结果无关,例如:

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

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

谢谢,

拉沙

1 个答案:

答案 0 :(得分: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()进行随机排序。