Mysql 选择不同但带有列的';s值

Mysql 选择不同但带有列的';s值,mysql,Mysql,这是我想要的 假设我们有这张桌子 Name Email Department Branch ------------------------------------------------------ John john@test.ca Information Technology SAP John john@test.ca Not Available Not Available Bret brett@test.ca

这是我想要的

假设我们有这张桌子

Name  Email          Department             Branch
------------------------------------------------------
John  john@test.ca   Information Technology SAP
John  john@test.ca   Not Available          Not Available
Bret  brett@test.ca  Emergency Response     911
Bret  brett@test.ca  Not Available          Not Available
diana diana@test.ca  Not Available          Not Available
现在我基本上想要得到以下结果:

如果约翰有“信息技术”和“不可用”,那么“信息技术”将成为优先事项。基本上,只有当John不属于任何其他部门时,才会显示不可用行。 因此,结果表如下所示:

Name  Email         Department             Branch
-----------------------------------------------------
John  john@test.ca  Information Technology SAP
Bret  brett@test.ca Emergency Response     911
Diana diana@test.ca Not Available          Not Available

谢谢

> P>此示例数据需要一个<代码>案例<代码>表达式来检查<代码>“不可用”<代码>,并将其视为<代码> null <代码>,这样您就可以聚合(用<代码> min <代码>或<代码> max >代码>):

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,name VARCHAR(12) NOT NULL  
,email VARCHAR(25) NOT NULL
,department VARCHAR(50)  NULL
,branch VARCHAR(50) NULL
);

INSERT INTO my_table VALUES
(1,'John','john@test.ca','Information Technology','SAP'),
(2,'John','john@test.ca',NULL,NULL),
(3,'Bret','brett@test.ca','Emergency Response','911'),
(4,'Bret','brett@test.ca',NULL,NULL),
(5,'diana','diana@test.ca',NULL,NULL);

SELECT name
     , email
     , MAX(department) department
     , MAX(branch) branch 
  FROM my_table 
 GROUP  
    BY name
     , email;
+-------+---------------+------------------------+--------+
| name  | email         | department             | branch |
+-------+---------------+------------------------+--------+
| Bret  | brett@test.ca | Emergency Response     | 911    |
| diana | diana@test.ca | NULL                   | NULL   |
| John  | john@test.ca  | Information Technology | SAP    |
+-------+---------------+------------------------+--------+
请参阅。
结果:


此示例数据需要一个<代码>案例<代码>表达式来检查<代码> >不可用'< /代码>,并将其视为<代码> null <代码>,这样您就可以聚合(用<代码> min <代码>或<代码> max >代码>):

请参阅。
结果:


有人可能会证明我错了,但我不相信你能在SQL中做到这一点。您需要检索数据,然后使用一些编程来对结果进行按摩。您可以在SQL中执行此操作,但是考虑将“不可用”存储为NulLad可能会证明我错了,但我不相信您可以在SQL中这样做。您需要检索数据,然后使用一些编程来对结果进行按摩。您可以在SQL中这样做,但是考虑将“不可用”存储为空。
select name, email,
  coalesce(
    max(case when department = 'Not Available' then null else department end),
    'Not Available'
  ) department,
  coalesce(
    max(case when branch = 'Not Available' then null else branch end),
    'Not Available'
  ) branch
from tablename
group by name, email
| name  | email         | department             | branch        |
| ----- | ------------- | ---------------------- | ------------- |
| Bret  | brett@test.ca | Emergency Response     | 911           |
| diana | diana@test.ca | Not Available          | Not Available |
| John  | john@test.ca  | Information Technology | SAP           |