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
答案 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