根据非唯一列中的唯一值获取完整行

时间:2012-07-04 11:47:42

标签: sql sql-server

我在SQLServer中有一个数据库,其中有一个名为emp_details的数据库有多行。该表包含几个字段,其中一个是薪水。薪水对于员工来说并不是唯一的,我需要为每个唯一的薪资值获取一个完整的行。

请告诉我可能有用的查询。

数据库样本:

a   b       c   d       e   f

17  IL11    53  IL11    48  58
26  IL10    53  IL10    48  58
31  IL15    53  IL15    48  58
32  IL16    53  IL16    24  58
33  IL17    53  IL17    36  58
34  IL18    53  IL18    36  58
37  IL21    53  IL21    36  58
40  IL24    53  IL24    48  58

我想在列e上过滤这个(假设它是薪水字段)

4 个答案:

答案 0 :(得分:1)

不确定这是否更好,因为没有架构。但这应该有用。

WITH Emp_Salary
AS
(
    SELECT 
        Column1
        , Column2
        , Salary
        , ROW_NUMBER() OVER (PARTITION BY Salary ORDER BY Column1) r  --numbers each row uniquely per salary
        FROM emp_details
)
SELECT
    Column1
    , Column2
    , Salary
FROM Emp_Salary
WHERE r = 1 -- Filters all but the first row per salary.
;

答案 1 :(得分:1)

SELECT
    *
FROM
    emp_details
WHERE
    Salary IN(
              SELECT
                  Salary
              FROM
                  emp_details
              GROUP BY  
                   Salary
              HAVING
                    COUNT(*) = 1
              )

答案 2 :(得分:0)

select distinct salary from emp_details将为您提供一系列工资值。

要获取其他行...您想如何选择所需的行?

如果你有PK的ID,你可以做

select * from emp_details where id in ( select Max(id),Salary from emp_details group by salary )

答案 3 :(得分:0)

如果内部查询将返回许多行,则不应使用IN运算符。 此外,count(*)将比count(id)慢很多。

这个可能会更快:

SELECT emp.*
  FROM emp_details emp
    WHERE exists (SELECT a 
                    from emp_details
                    where e = emp.e
                    group by e
                      having count(a) = 1
                 );