예, 그런 선택을하는 방법이 있습니다. 실제 쿼리는 실제로 반환 할 결과 집합에 따라 다릅니다. 하나의 행 또는 두 개의 개별 행을 원하십니까? CallCenterId가 목록 내에서 복제되어야합니까? CallCenterId가 user = 1에 대한 목록에서 제외 된 경우 사용자! = 1에 대한 목록에서 제외 시키시겠습니까? 그것들 모두 가능합니다.
테스트 케이스 : 사양의
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에 대한 모든 CallCenterId의 목록을 원하는이며, 표에 나타나지만 user = 1에 대한 목록으로 표시되지 않는 모든 CallCenterId의 다른 목록이 필요합니다. 기본적으로 CallCenterId를 하나의 목록이나 다른 목록에 표시하려고하지만 둘 다 표시하지 않습니다.테스트의 경우, 이것은 당신이 뭔가를 반환 할 것입니다 의미 :
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
또 다른 가능한 해석이다 : 결과 집합이 같은 쿼리에 의해 반환 될 수
user=1 NOT user=1
------ ----------
a,b c,d,x
동일한 행에 두 개의 CallCenterID 목록이 반환되고 하나의 목록에는 사용자에 대한 CallCenterId가 포함되고 다른 목록에는 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
그것은, 두 개의 행으로 해당 목록을 반환 할 수도 있습니다.
가
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
('! 사용자 = 1'NOTE 대한 call_centers 목록 또한 user
열이 NULL 인 행에 대한 값을 포함한다; 그 행이 약간 트윅으로 배제 할 수있다.)
which_users call_centers
----------- --------------
user=1 a,b
user!=1 a,a,c,d,x
A (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
, 좀 더 명확하게 반환 원하는 결과 집합을 지정해야합니다.
나를 용서 하시되, 당신은 = 1이고 그것들은 = 1 인 모든 것을 얻고 싶습니까? – George
드롭 어디 조건! :) – tuxuday
우리에게 당신의 기대 결과와 테이블 구조를 보여주십시오. – bonCodigo