sql查询不显示重复记录
问题描述:
Customers
id,name,orderid
----------------------
1,Ted, 1
2,Jen, 2
Orders
id,prodname
----------------------
1,widgetA
1,widgetC
2,widgetB
2,widgetA
desired results
name, prodname
----------------------
Ted, widgetA
' ', widgetC
Jen, widgetB
' ', widgetA
基本上我不想重复客户的名字,如果她有多个产品。有没有办法做到这一点?sql查询不显示重复记录
解决方案:
Select
(CASE WHEN myrow=1 THEN Name ELSE ' ' END) AS Name,
product
From
(
Select
ROW_NUMBER() OVER (PARTITION BY c.Name ORDER BY c.Name) AS myrow,
o.productname AS product
FROM
Customers c JOIN
Orders o ON c.orderid = o.id
) T1
Order By Name
答
要回答你的问题,虽然有强烈的情况下使用不同的解决方案;如果您使用的是sql server,请查看“row_number()”。我没有使用SQL Server,但它可能是这个样子:
Select
ROW_NUMBER() OVER (ORDER BY c.Name) AS myrow,
if(myrow=1,name,' ') AS name,
o.productname AS product
FROM
Customers c JOIN
Orders o ON c.orderid = o.id
答
首先,这里有个不确定性。如果有两个Teds,你希望发生什么?
尽管SQL可能会根据您正在运行的服务器而有所不同,但最有可能的方法是使用SQL。不过,我强烈反对。你可以用一个单一的连接(假设你已经正确设置了索引)将一个简单而有效的查询变成过于复杂的事情。
你的愿望应该在显示器/消费者方面真正做到。毫无疑问,你会得到一个解决方案,但我会采用标准连接。我还会将客户ID添加到输出以避免上述含糊不清。
+0
采取点,谢谢所有。 – Rod
你一定要做到这一点,显示层上不上的数据库级别 – Lamak
@Lamak:但你可能想这样做,如果你正在返回在SQL Reporting Services报告中使用的结果集 – Sung
我说使用游标,但我觉得懒得想出一个使用游标的解决方案 – Sung