2
如何在一行中显示不同电话号码的员工,其中电话号码按列显示?MySQL:组ID并在不同的列上显示不同的值
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这个组,然后再做一个查询来获得他们的phonenumbers,但是这会做2个查询。这里的目标是仅使用1个查询语句来实现此输出。
哇!大!正是我在找的!虽然我想知道它是否可以动态处理员工的电话号码数量?我在想,它会首先获得最多电话号码的员工,然后创建列并填写列。它甚至有可能吗? – basagabi
@basagabi - 如果员工可以拥有电话号码的数量上限,那么可以通过SQL(通过一些黑客行为,建议使用应用程序代码)。如果它是完全动态的,那么你需要动态SQL。然而,这将是一个新问题。 – GurV
@GurV你可以帮我在这里https://stackoverflow.com/questions/43319465/how-do-i-create-mysql-procedure-to-loop-through-table – user3637224