2017-04-10 86 views
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個查詢語句來實現此輸出。

回答

2

您可以使用聚合數據透視。

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; 

爲例表達式用來檢查是否有多於一個的不同的電話號碼,然後僅顯示所述第二數目,否則顯示空。如果您只想檢查計數(而不是不同的電話號碼),您也可以使用count

​​
+0

哇!大!正是我在找的!雖然我想知道它是否可以動態處理員工的電話號碼數量?我在想,它會首先獲得最多電話號碼的員工,然後創建列並填寫列。它甚至有可能嗎? – basagabi

+1

@basagabi - 如果員工可以擁有電話號碼的數量上限,那麼可以通過SQL(通過一些黑客行爲,建議使用應用程序代碼)。如果它是完全動態的,那麼你需要動態SQL。然而,這將是一個新問題。 – GurV

+0

@GurV你可以幫我在這裏https://stackoverflow.com/questions/43319465/how-do-i-create-mysql-procedure-to-loop-through-table – user3637224

相關問題