1
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
4

2 回答 2

1

首先,这里有歧义。如果有两个 Ted,你期望会发生什么?

很可能有一种方法可以使用 SQL 来执行此操作,尽管它可能会因您运行的服务器而异。不过,我强烈建议不要这样做。您将使用单个连接(假设您已正确设置索引)将简单而有效的查询变成过于复杂的东西。

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

于 2012-05-17T16:54:22.550 回答
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
于 2012-05-17T17:08:24.770 回答