2014-01-28 67 views
1
Ticket_Number Entered_By Responded_By Closed_By Touched_by 
---------------------------------------------------------------------- 
10001   John   NULL   Mike   John, Mike 
10002   Sally   Mike   Mike   Sally, Mike 
10003   NULL   George   Amber  George, Amber 
10004   John   Holly   Timothy  John, Holly, Timothy 

我的數據如上所示。我期待的是添加最後一列Touched_By。基本上我知道我需要連接,刪除重複,然後建立一個沒有重複分隔符的列表。我只是不知道如何。MYSQL:創建每個記錄不同列值的列表

回答

1

你可以試試嗎?您可以測試在這裏http://www.sqlfiddle.com/#!2/7a4d2/1

SELECT number, GROUP_CONCAT(by_whom) 
FROM (
    SELECT number, entered_by AS by_whom FROM ticket 
    UNION 
    SELECT number, responsed_by AS by_whom FROM ticket 
    UNION 
    SELECT number, closed_by AS by_whom FROM ticket 
) x 
WHERE by_whom IS NOT NULL 
GROUP BY number; 

+--------+-----------------------+ 
| number | GROUP_CONCAT(by_whom) | 
+--------+-----------------------+ 
| 10001 | Mike,John    | 
| 10002 | Mike,Sally   | 
| 10003 | Amber,George   | 
| 10004 | John,Timothy,Holly | 
+--------+-----------------------+ 

請注意,GROUP_CONCAT()返回值的最大長度。默認值對於你來說就夠102400.

mysql> SHOW VARIABLES LIKE 'group_concat_max_len'; 
+----------------------+--------+ 
| Variable_name  | Value | 
+----------------------+--------+ 
| group_concat_max_len | 102400 | 
+----------------------+--------+ 
1 row in set (0.00 sec) 
+0

正是我在找的東西!我在下面實際使用的(添加一些清理)。 'SELECT TICKET_NUMBER,REPLACE(修整(BOTH '' 從GROUP_CONCAT(by_whom)), ',,', '') FROM(SELECT TICKET_NUMBER,entered_by AS by_whom FROM t_parature_ticket_details UNION SELECT TICKET_NUMBER,initial_responder AS by_whom FROM t_parature_ticket_details UNION SELECT TICKET_NUMBER,closed_by AS by_whom FROM t_parature_ticket_details )× WHERE by_whom IS NOT NULL GROUP BY TICKET_NUMBER LIMIT 1000;' – jconnors

0

功能concat_ws()具有很好的功能,它跳過NULL參數。這使它對此有用:

select t.*, 
     concat_ws(', ', Entered_By, 
       (case when Responded_By = Entered_By 
         then NULL else Responded_By 
        end), 
       (case when Closed_By = Entered_By or Closed_By = Responded_By 
         then NULL else Closed_By 
        end) 
       ) as Resolved_By 

Here是一個SQL小提琴。