SQL查询不显示重复记录

时间:2012-05-17 16:46:02

标签: sql sql-server

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

如果她有多个产品,我基本上不想重复客户的名字。有没有办法做到这一点?

解决方案:

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

2 个答案:

答案 0 :(得分:1)

首先,这里存在歧义。如果有两个Teds,你会发生什么?

最有可能通过SQL执行此操作,但可能会因您运行的服务器而异。不过,我强烈建议不要这样做。您可以使用单个连接(假设您已正确设置索引)将简单而有效的查询转换为过于复杂的内容。

你应该在显示器/消费者方面做到你想要的。你无疑会得到一个解决方案,但我会选择一个标准的连接。我还将客户ID添加到输出中以避免上述歧义。

答案 1 :(得分:1)

要回答您的问题,尽管有一个强有力的案例可以使用不同的解决方案;如果您使用的是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