2014-10-21 2 views
0

У меня есть таблица:Группа повторяющихся записей в SQL Server, где некоторое поле = 0

| LastName | FirstName | Title    | isdefault | 
+----------+-----------+----------------------+-----------+ 
| Davolio | Nancy  | Sales Representative | 1   | 
| Fuller | Andrew | Vice President, Sales| 1   | 
| Fuller | Andrew | Vice President, Sales| 0   | 
| Fuller | Andrew | Vice President, Sales| 0   | 
| Leverling| Janet  | Sales Representative | 0   | 
| Leverling| Janet  | Sales Representative | 0   | 
| Leverling| Janet  | Sales Representative | 0   | 

в базе данных SQL Server.

Мой запрос:

SELECT 
    LastName, FirstName, Title, isdefault 
FROM 
    Employees 

Я хочу, чтобы выбрать одинаковые записи, где isdefault = 0. Так что мой новый вывод должен быть:

| LastName | FirstName | Title    | isdefault | 
+----------+-----------+----------------------+-----------+ 
| Leverling| Janet  | Sales Representative | 0   | 
| Leverling| Janet  | Sales Representative | 0   | 
| Leverling| Janet  | Sales Representative | 0   | 

Я пытался использовать GROUP BY:

SELECT 
    LastName, FirstName, Def_flag 
FROM 
    Employees 
WHERE 
    Def_flag = 0 
GROUP BY 
    LastName, FirstName, Def_flag 

но результат меня не удовлетворяет, так как запись Фуллер попасть в таблицу тоже.

Как мне изменить запрос?

С уважением, Александр.

+2

И это помечено mysql, потому что ...? – Strawberry

+0

На равных Вы имеете в виду ?? –

+0

ой, извините, моя ошибка - mssql –

ответ

0

что вы об этом думаете? Это даст вам результат, который вы ищете.

SELECT e1.* 
FROM Employees e1 
    left join (SELECT distinct LastName, FirstName FROM Employees t WHERE isdefault = 1) exclude 
     ON e1.FirstName = exclude.FirstName 
     AND e1.LastName = exclude.LastName 
WHERE (Exclude.FirstName IS NULL AND Exclude.LastName IS NULL) 

Я предполагаю, что FirstName + LastName является вашим ключом. Если у вас есть идентификатор, вы должны его заменить.

0

Вы имеете в виду сотрудников, где все записи для Def_flag равны 0?

select 
    LastName, 
    FirstName, 
    Def_flag 
from (
    select 
     ROW_NUMBER() OVER (
      PARTITION BY 
       LastName,FirstName 
      ORDER BY 
       Def_flag DESC 
     ) i 
     LastName, 
     FirstName, 
     Def_flag 
    FROM Employees 
) T 
where 
    i = 1 and 
    Def_flag = 0 
0

Предполагая, что isdefault немного, вы можете это сделать. В противном случае используйте sum (isdefault) = 0, хотя он все равно будет работать так, как есть. Я предполагаю, что по умолчанию не может быть отрицательным

SELECT LastName, FirstName, Title 
FROM <yourtable> 
GROUP BY LastName, FirstName, Title 
HAVING sum(isdefault+0) = 0 

Это вернет

LastName FirstName Title 
Leverling Janet  Sales Representative 
Смежные вопросы