我在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上过滤这个(假设它是薪水字段)
答案 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
);