2016-01-21 85 views
1

我試圖對錶進行查詢以確定值分配多次的位置,但其中一個分配者必須等於確定的值。如果其中一個行包含特定值,則返回列中具有重複值的行

例如:

EmployeeName |EmployeeNumber|EmployeeDept|EmployeeBadgeCode| 
--------------+--------------+------------+-----------------+ 
Dante Hicks |1    |200   |1     pair A 
Randall Graves|5    |201   |2       no pair 
Brody Bruce |1    |555   |3     pair A 
Banky Edwards |20   |004   |4     pair B 
Gwen Turner |7    |200   |5 
Holden McNeil |20   |450   |1     pair B 
TS Quint  |5    |105   |10       no pair 

我想返回所有行,其中有一個重複EmployeeNumber但前提是重複的價值之一是1 EmployeeBadgeCode。

所以我想將'Dante Hicks'和'Brody Bruce'作爲一對重複對象,'Banky Edwards'和'Holden McNeil'作爲另一對重複對象。

「蘭德爾·格雷夫斯」和「TS昆特」將不予退還,因爲他們有重複的EmployeeNumber但既不EmployeeBadeCode值等於1

任何幫助,將不勝感激。

謝謝。

+0

不能完全肯定我以下。什麼定義了一個重複的'EmployeeNumber'?如果是這樣,那麼兩個結果都必須包含1,以便它們是重複的。無論如何,'group by/having'加入''應該可以讓你得到你想要的。你有什麼嘗試? – sgeddes

+0

你的問題不清楚什麼是重複的。請閱讀http://stackoverflow.com/help/how-to-ask 這裏是[** START **]的好地方(http://spaghettidba.com/2015/04/24/how-to -post-at-sql-question-on-a-public-forum /) –

+0

對不起......當EmployeeNumber出現多次時發生重複。我在我的嘗試中做了一個小組...我的查詢返回所有重複項,我在返回其中一個重複項的值等於1的行時遇到困難。 – user2820853

回答

0

SQL Fiddle Demo

e1.[EmployeeName] < e2.[EmployeeName] 

這是爲了確保你不要試圖以配合自己,也避免反向對。

SELECT e1.*, e2.* 
FROM employee e1 
JOIN employee e2 
    ON e1.[EmployeeNumber] = e2.[EmployeeNumber] 
AND e1.[EmployeeName] < e2.[EmployeeName] 
WHERE 
    e1.EmployeeBadgeCode = 1 
or e2.EmployeeBadgeCode = 1 

在這個解決方案中,employess可以有1。您需要添加一個aditional的驗證,如果只希望員工之一是1

輸出

| EmployeeName | EmployeeNumber | EmployeeDept | EmployeeBadgeCode | EmployeeName | EmployeeNumber | EmployeeDept | EmployeeBadgeCode | 
|---------------|----------------|--------------|-------------------|---------------|----------------|--------------|-------------------| 
| Brody Bruce |    1 |   555 |     3 | Dante Hicks |    1 |   200 |     1 | 
| Banky Edwards |    20 |   4 |     4 | Holden McNeil |    20 |   450 |     1 | 
+0

謝謝,Juan。這解決了。感謝幫助。 – user2820853

0

這將返回這兩行。如果只有一個EmployeeNumber 1,那麼它不會返回任何東西。

SELECT * 
FROM YourTable 
WHERE EmployeeNumber = 
    (SELECT EmployeeNumber 
    FROM YourTable 
    WHERE EmployeeNumber = 1 
    GROUP BY EmployeeNumber 
    HAVING COUNT(1) > 1) 
相關問題