2015-06-10 7 views
4

выбрать все отделы, имеющие студент даже с рулонного номеромпроверить все значения столбца

Dept No  Roll No Student Name 

1   1   lee 
1   2   scott 
2   2   scott 
2   4   smith 
1   4   smith 

Это должно привести к DEPT не 2, как это имеет только студент с числом валков, кратные 2

ответ

2

Другой (имо простой и легкий) способ использует NOT EXISTS и DISTINCT:

SELECT DISTINCT [Dept No] 
FROM dbo.TableName t 
WHERE NOT EXISTS 
(
    SELECT 1 FROM dbo.TableName t2 
    WHERE t.[Dept No] = t2.[Dept No] 
     AND t2.[Roll No] % 2 = 1 
) 

Demo

Если нет нечетного числа все должно быть четным.

1

You может использовать GROUP BY с HAVING вот так.

Запрос

SELECT [Dept No] 
FROM departments 
GROUP BY [Dept No] 
HAVING SUM(CASE WHEN [Roll No] % 2 = 0 THEN 1 ELSE 0 END) > 1 
AND SUM(CASE WHEN [Roll No] % 2 = 1 THEN 1 ELSE 0 END) = 0 

Объяснение

Запрос возвращает отделы, если есть rollno, который даже при использовании SUM(CASE WHEN [Roll No] % 2 = 0 THEN 1 ELSE 0 END) > 1. Если есть какой-либо rollno с нечетным рулоном no, SUM(CASE WHEN [Roll No] % 2 = 1 THEN 1 ELSE 0 END) вернет ненулевую сумму, и этот отдел будет исключен.

0
declare @t table (Dept int,Rno int,Student varchar(10)) 
insert into @t (Dept,Rno,Student)values (1,1,'lee'),(1,2,'scott'),(2,2,'scott'),(2,4,'smith'),(1,4,'smith') 



SELECT Dept,Rno,Student 
FROM (SELECT ROW_NUMBER() OVER (ORDER BY Rno DESC) row_number, Dept,Rno,Student 
    FROM @t) a WHERE (row_number%2) = 0 
Смежные вопросы