gpt4 book ai didi

php - MySQL:分组 ID 并在单独的列上显示不同的值

转载 作者:搜寻专家 更新时间:2023-10-30 20:24:30 26 4
gpt4 key购买 nike

电话号码按列显示时,如何只在一行显示不同电话号码的员工?

Create Table Employees(
Employee_ID INT,
PhoneNumber VARCHAR(50)
);

INSERT INTO Employees VALUES (1,'111'),(1,'222'),(2,'111'),(2,'222'),(3,'111'),(3,'222'),(4,'111'),(5,'111'),(5,'222')

这是我尝试过的方法,但似乎不起作用。

SELECT *
FROM Employees
WHERE PhoneNumber IN (
SELECT PhoneNumber
FROM Employees
GROUP BY PhoneNumber
HAVING COUNT(Employee_ID) > 1
)

您可以在这个 SQL Fiddle. 上查看

输出应该是:

Employee_ID | PhoneNumber_1 | PhoneNumber_2
1 | 111 | 222
2 | 111 | 222
3 | 111 | 222
4 | 111 | null
5 | 111 | 222

假设每个员工最多只有两个电话号码。

这甚至可能仅使用 mysql 来显示这种结果吗?另一种方法是只获取 employee_ids 他们的组,然后进行另一个查询以获取他们的电话号码,但这将进行 2 次查询。这里的目标是仅使用 1 个查询语句来实现此输出。

最佳答案

您可以使用聚合透视数据。

SELECT 
Employee_ID,
min(PhoneNumber) as Phone1,
case when min(PhoneNumber) <> max(PhoneNumber) then max(PhoneNumber) end as Phone2
FROM Employees
group by Employee_ID;

Case 表达式用于检查是否有多个不同的电话号码,然后只显示第二个号码,否则显示 null。如果您只想检查计数(而不是不同的电话号码),您也可以使用 count

SELECT 
Employee_ID,
min(PhoneNumber) as Phone1,
case when count(*) > 1 then max(PhoneNumber) end as Phone2
FROM Employees
group by Employee_ID;

关于php - MySQL:分组 ID 并在单独的列上显示不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43314775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com