1

我在 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

4 回答 4

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.
;
于 2012-07-04T12:11:27.567 回答
1
SELECT
    *
FROM
    emp_details
WHERE
    Salary IN(
              SELECT
                  Salary
              FROM
                  emp_details
              GROUP BY  
                   Salary
              HAVING
                    COUNT(*) = 1
              )
于 2012-07-04T12:15:46.593 回答
0

select distinct salary from emp_details会给你一系列的薪水值。

要获得其他行......你想如何选择你想要的行?

如果你有一个 ID 的 PK 你可以做

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

于 2012-07-04T11:50:10.820 回答
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
                 );
于 2012-07-04T12:54:42.413 回答