我尝试查询表以确定多次分配值的位置,但其中一个受让人必须等于确定的值。
例如:
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的所有行的位置,但仅当EmployeeBadgeCode的副本值为1时才返回。
所以我想回归Dante Hicks'和布罗迪布鲁斯'作为一对副本和“银河爱德华兹”。和霍尔登麦克尼尔'作为另一副重复。
'兰德尔格雷夫斯'和' TS Quint'将不会返回,因为它们具有重复的EmployeeNumber,但EmployeeBadeCode值都不等于1.
任何帮助将不胜感激。
感谢。
答案 0 :(得分:0)
这将返回这两行。如果只有一个EmployeeNumber 1那么它就不会返回任何内容。
SELECT *
FROM YourTable
WHERE EmployeeNumber =
(SELECT EmployeeNumber
FROM YourTable
WHERE EmployeeNumber = 1
GROUP BY EmployeeNumber
HAVING COUNT(1) > 1)
答案 1 :(得分: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
在此解决方案中,两个雇员都可以1
。如果只需要一名员工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 |