是的,有一种方法可以做这样的选择。实际的查询实际上取决于你想返回的结果集。你想要一行还是两行? CallCenterId是否应该在列表中复制?你想CallCenterId排除列表中的用户!= 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的列表,并你要出现在表中,但没有出现在列表中的用户= 1 ALL CallCenterId的另一个列表。基本上,你想要一个CallCenterId出现在一个列表或其他,但不是两个。在测试的情况下,这将意味着你会想回到这样的事情:
user=1 NOT user=1
------ ----------
a,b c,d,x
该ResultSet可以通过这样的查询返回:
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
另一种可能的解释是,你希望两个CallCenterID列表返回同一行上,用含有CallCenterId用户= 1一个列表,包含所有CallCenterId比用户= 1,意义以外的所有用户的其他列表,同样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”注意的call_centers列表还将包括值的行,其中user
列是NULL;那些行可以排除具有轻微的调整。)
which_users call_centers
----------- --------------
user=1 a,b
user!=1 a,a,c,d,x
略微不同的查询将在列表中消除重复(使用DISTINCT关键字),并消除其中user
柱IS 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