3

mysqlそのレコードにクエリがあり、group concats冗長なトークンを持つ値を返します。以下は、クエリの出力です。

Problem Area->ACC-HO->ACC-HO->Credit Note (C/N)->Problem description ->Problem description 

しかし、以下のようにこの文字列の個別のトークンが必要です

Problem Area->ACC-HO->Credit Note (C/N)->Problem description 

SELECTSQLクエリ自体でこれを行う方法はありますか?

編集 ここにスキーマとクエリがあります 以下は私のクエリです:

SELECT 
t2.transaction_id AS transaction_id, 
GROUP_CONCAT(
CONCAT(
 t1.display_text,
 '->',
   (CASE (NOT EXISTS (SELECT 1 FROM mst_node a WHERE a.parent_node_id = t1.node_id))
      WHEN 1 THEN t1.display_text ELSE 
      (SELECT b.display_text AS DISPLAY FROM mst_node b 
      WHERE parent_node_id = t2.node_id AND b.display_seq = t2.entered_value) 
     END)
     ) 
  ORDER BY t2.logtime_stamp SEPARATOR '->'
) AS display_text 
FROM

mst_node t1 
  JOIN trn_user_log t2 
    ON t1.app_id = t2.app_id AND t1.node_id = t2.node_id     
WHERE (t1.app_id = 105) 
  AND t1.parent_node_id IS NOT NULL 
  AND t1.save_as_default IS NULL 
GROUP BY transaction_id,
  mobile_no 
ORDER BY t2.transaction_id DESC,
  t2.logtime_stamp,
  t2.mobile_no 
4

3 に答える 3

5

GROUP CONCAT追加するDISTINCTと、一意の値のみが連結されます。

SELECT GROUP_CONCAT(DISTINCT colName),....
FROM   ...
WHERE  ...
GROUP BY ...

SQLFiddle デモ

于 2012-09-26T08:52:51.577 に答える
0

最終的にUNION、2 つの選択クエリを使用してからGROUP_CONCAT(DISTINCT column ORDER BY another_column).

以下は、私が使用したクエリです。

SELECT 
transaction_id,
GROUP_CONCAT(DISTINCT display_text ORDER BY logtime_stamp SEPARATOR '->') AS display_text
FROM
 (SELECT 
  t2.transaction_id AS transaction_id,
  t2.logtime_stamp,
  t1.display_text AS display_text 
  FROM mst_node t1 
  JOIN trn_user_log t2 ON t1.app_id = t2.app_id 
   AND t1.node_id = t2.node_id 
   WHERE (t1.app_id = 105) 
   AND t1.parent_node_id IS NOT NULL 
   AND t1.save_as_default IS NULL 
  UNION
 SELECT t2.transaction_id AS transaction_id,t2.logtime_stamp,
  CASE(NOT EXISTS (SELECT 1 FROM mst_node a WHERE a.parent_node_id = t1.node_id)) 
  WHEN 1 THEN NULL 
  ELSE (SELECT b.display_text AS display_text FROM mst_node b WHERE parent_node_id = t2.node_id AND b.display_seq = t2.entered_value) 
  END AS display_text
FROM   mst_node t1 JOIN trn_user_log t2 
      ON t1.app_id = t2.app_id AND t1.node_id = t2.node_id    
  WHERE (t1.app_id = 105) 
  AND t1.parent_node_id IS NOT NULL 
  AND t1.save_as_default IS NULL 
  ORDER BY transaction_id DESC,logtime_stamp
  ) AS T 
  GROUP BY transaction_id 
  ORDER BY transaction_id DESC,logtime_stamp 
于 2012-09-26T13:20:01.490 に答える
0

グループ化句では、group byこの文字列列でグループ化するために別のものを追加することもできます。

SELECT GROUP_CONCAT(myStringColumn),....
FROM   ...
WHERE  ...
GROUP BY myOtherColumn,myStringColumn
于 2012-09-26T08:54:08.077 に答える