2011-04-27 25 views
0

假设我有一个SQL查询是这样的:SQL:连接所有匹配给定键的字段?

SELECT 
    tickets.TicketNumber, history.remarks 
    FROM 
    AT_DeviceReplacement_Tickets tickets 
    INNER JOIN 
    AT_DeviceReplacement_Tickets_History history 
    ON tickets.TicketNumber = history.TicketNumber; 

我得到一个表像这样repsonse:

ticketNumber | remarks 
-------------+------------ 
      1 | "Hello, there is a problem." 
      1 | "Did you check the power cable? 
      1 | "We plugged it in and now it works. Thank you!" 
      2 | "Hello, this is a new ticket." 

假设我要编写一个查询,将串连的言论每张机票并返回一个表是这样的:

ticketNumber | remarks 
-------------+------------ 
      1 | "Hello, there is a problem.Did you check the power cable?We plugged it in and now it works. Thank you!" 
      2 | "Hello, this is a new ticket." 

是的,在实际的代码,我实际上已经通过了这些日期排序,除其他事项外,只是为求讨论,我将如何编辑上述查询以获得我描述的结果?

+0

我猜我需要使用某种'GROUP BY'魔法。 – 2011-04-27 18:13:31

回答

1

最干净的解决这个问题是DB依赖。 Lentine的链接为Oracle和SQL Server展示了非常难看的解决方案,并且为MySQL提供了一个清晰的解决方案。 PostgreSQL中的答案也非常简短。

SELECT ticket_number, string_agg(remarks, ', ') 
FROM 
AT_DeviceReplacement_Tickets tickets 
INNER JOIN 
AT_DeviceReplacement_Tickets_History history 
ON tickets.Ticket_Number = history.Ticket_Number 
GROUP BY tickets.ticket_number; 

(请注意,您必须在您的示例代码都TICKET_NUMBER和TicketNumber。)

我的猜测是,Oracle和SQL Server:(1)具有相似的聚合函数(2)具有的能力定义您自己的聚合函数。 [对于MySQL,等效的聚合称为GROUP_CONCAT。]您使用的是哪个数据库?

相关问题