我有一个案例,其中有相同ID的行,我只是想知道是否有任何方法可以找出给定ID是否包含某些特定值。
ID Dept Salary Flag Date
1 IT 5000 N 2017-01-01
1 IT 5000 N 2017-01-02
1 IT 5000 N 2017-01-03
1 IT 5000 N 2017-01-04
1 IT 5000 N 2017-01-05
2 HR 4000 N 2017-01-01
2 HR 4000 N 2017-01-02
2 HR 4000 Y 2017-01-03
2 HR 4000 N 2017-01-04
2 HR 4000 N 2017-01-05
3 Fin 4500 N 2017-01-08
3 Fin 4500 N 2017-01-09
3 Fin 4500 N 2017-01-10
3 Fin 4500 N 2017-01-11
3 Fin 4500 N 2017-01-12
4 Edu 4800 N 2017-02-10
4 Edu 4800 N 2017-02-11
4 Edu 4800 N 2017-02-12
4 Edu 4800 Y 2017-02-13
4 Edu 4800 N 2017-02-14
4 Edu 4800 N 2017-02-15
ID Dept Salary Flag Date
1 IT 5000 N 2017-01-01
1 IT 5000 N 2017-01-02
1 IT 5000 N 2017-01-03
1 IT 5000 N 2017-01-04
1 IT 5000 N 2017-01-05
3 Fin 4500 N 2017-01-08
3 Fin 4500 N 2017-01-09
3 Fin 4500 N 2017-01-10
3 Fin 4500 N 2017-01-11
3 Fin 4500 N 2017-01-12
由于IT和Fin没有Y标志,在任何一行中,我只想显示这个结果。有什么方法可以找到这些信息。
答案 0 :(得分:2)
试试这个
select * from @mytable
where id in (
select
id from @mytable
group by id
having SUM(case when flag='N' then 1 else 0 end) =COUNT(*))
答案 1 :(得分:1)
您可以使用DENSE_RANK()
功能根据列Dept
,Flag
SELECT * FROM <table> WHERE ID IN
(
SELECT A.ID FROM
(
SELECT *, DENSE_RANK() OVER (order by Dept, Flag) [RN] FROM <table>
) A GROUP BY A.ID HAVING COUNT(DISTINCT RN) = 1)
编辑:如果您不想使用DENSE_RANK()
功能,您还可以使用简单的case
表达式条件
SELECT * FROM <table> WHERE ID IN
(
SELECT ID FROM <table> GROUP BY ID
HAVING COUNT(DISTINCT CASE WHEN Flag = 'N' THEN 1 ELSE 0 END) = 1
);
其他简单方法:
SELECT * FROM <table> WHERE ID NOT IN
(
SELECT DISTINCT ID FROM <table> WHERE FLAG ='Y'
);
结果:
ID Dept Salary Flag Date
1 IT 5000 N 2017-01-01
1 IT 5000 N 2017-01-02
1 IT 5000 N 2017-01-03
1 IT 5000 N 2017-01-04
1 IT 5000 N 2017-01-05
3 Fin 4500 N 2017-01-08
3 Fin 4500 N 2017-01-09
3 Fin 4500 N 2017-01-10
3 Fin 4500 N 2017-01-11
3 Fin 4500 N 2017-01-12
答案 2 :(得分:1)
我认为这样的样本:
SELECT * FROM table WHERE ID NOT IN
(
SELECT ID FROM table WHERE FLAG ='Y'
);
答案 3 :(得分:0)
WITH Flaggen AS
(
select distinct ID
from Table1
where Flag <> 'Y'
)
select *
from Table1
join Flaggen
on Flaggen.Id = Table1.ID
答案 4 :(得分:-1)
嘿@Avi因为你只想显示表中的记录只是使用带有id的where子句然后你会得到预期的输出
select id,Dept,Salary,Flag,Date
from mytable
where id in (1,3)
希望这可能有所帮助。