はい、そのような選択を行う方法があります。実際のクエリは、返される結果セットによって異なります。1 つの行または 2 つの別々の行が必要ですか? CallCenterId はリスト内で重複する必要がありますか? user=1 のリストに CallCenterId が表示される場合、user!=1 のリストから CallCenterId を除外しますか? それらのすべてが可能です。
テストケース:
CREATE TABLE tbl_mytable( `user` INT UNSIGNED, CallCenterId VARCHAR(2));
INSERT INTO tbl_mytable
VALUES (1,'a'),(1,'b'),(2,'a'),(2,'c'),(2,'a'),(2,'d'),(NULL,'x');
この仕様の考えられる解釈の 1 つは、user=1 のすべての CallCenterId のリストが必要であり、テーブルに表示されているが user=1 のリストに表示されていないすべての CallCenterId の別のリストが必要であるというものです。基本的に、CallCenterId をどちらか一方のリストに表示する必要がありますが、両方には表示しないでください。テストケースでは、これは次のようなものを返すことを意味します:
user=1 NOT user=1
------ ----------
a,b c,d,x
その結果セットは、次のようなクエリで返すことができます。
SELECT GROUP_CONCAT(IF(user_one,t.CallCenterId,NULL)
ORDER BY t.CallCenterId
) AS `user=1`
, GROUP_CONCAT(IF(user_one,NULL,t.CallCenterId)
ORDER BY t.CallCenterId
) AS `NOT user=1`
FROM (
SELECT u.CallCenterId
, MAX(IF(u.user=1,1,0)) AS user_one
FROM tbl_mytable u
GROUP BY u.CallCenterId
) t
もう 1 つの考えられる解釈は、2 つの CallCenterID リストが同じ行に返されるようにすることです。1 つのリストには user=1 の CallCenterId が含まれ、もう 1 つのリストには user=1 以外のすべてのユーザーのすべての CallCenterId が含まれます。つまり、同じ CallCenterId が両方のリストに表示されます。その場合、次のようなものが機能します。
SELECT GROUP_CONCAT(DISTINCT IF(t.`user`=1,t.CallCenterID,NULL)
ORDER BY t.CallCenterId
) AS `user=1`
, GROUP_CONCAT(DISTINCT IF(t.`user`!=1,t.CallCenterID,NULL)
ORDER BY t.CallCenterId
) AS `user!=1`
FROM tbl_mytable t
戻り値:
user=1 user!=1
------ ---------
a,b a,c,d
これらのリストを 2 つの別々の行として返すこともできます。
SELECT IF(t.`user`=1,'user=1','user!=1') AS `which_users`
, GROUP_CONCAT(t.CallCenterID ORDER BY t.CallCenterId) AS `call_centers`
FROM tbl_mytable t
GROUP BY which_users
ORDER BY which_users DESC
(注: 'user!=1' の call_centers リストには、user
列が NULL である行の値も含まれます。これらの行は、わずかな調整で除外できます。)
which_users call_centers
----------- --------------
user=1 a,b
user!=1 a,a,c,d,x
少し異なるクエリでは、リスト内の重複を排除し (DISTINCT キーワードを使用)、列がuser
NULL である行を排除します (WHERE 句を追加します)。
SELECT IF(t.`user`=1,'user=1','user!=1') AS `which_users`
, GROUP_CONCAT(t.CallCenterID ORDER BY t.CallCenterId) AS `call_centers`
FROM tbl_mytable t
WHERE t.user IS NOT NULL
GROUP BY which_users
ORDER BY which_users DESC
戻り値:
which_users call_centers
----------- ------------
user=1 a,b
user!=1 a,c,d
これらのどれも探しているものではない場合は、返される結果セットをより明確に指定する必要があります。