在SQL Server中,如何从包含每个CustomerID
的多个记录的表中仅选择第一条记录?
样本数据:
CustomerID | Name | Email | Phone
123 | Emiliano | emilaino@gmail.com | null
123 | null | emi@gmail.com | 334455667
123 | Emiliano | null | 334455667
110 | Pippo | pippo@gmail.com | 3232312
110 | Pippo | null | 3232312
110 | Pippo | pippo@gmail.com | null
所需结果:
123 | Emiliano | emilaino@gmail.com | null
110 | Pippo | pippo@gmail.com | 3232312
答案 0 :(得分:1)
这应该做。
select top (1) *
from [tablename]
where CustomerID = @customerID
P.S。根据您的示例,您可能需要重新考虑如何存储数据,尚不清楚哪一行是有效行。您可以在上面添加一个order by子句以根据电子邮件或名称对数据进行排序以获取正确的行
答案 1 :(得分:0)
如果您有一个标识顺序的身份列,则可以使用相关的子查询获取每个customerid的“第一条”记录:
select t.*
from t
where t.id = (select min(t2.id) from t t2 where t2.customerid = t.customerid);
答案 2 :(得分:0)
下面的查询将允许您从customerID中选择所有记录
SELECT *
FROM tableName
WHERE CustomerID = 1
答案 3 :(得分:0)
请参阅以下查询。您可以在SQL中使用Over
。
select *
from (
select *
, row_number() over (partition by CustomerID order by CustomerID) as Rownum
from table
) t
where t.CustomerID = yourcustomerid and t.Rownum = 1;