объединить запрос в одной таблице - PullRequest
2 голосов
/ 18 октября 2019

У меня есть таблица errorflag, где ниже приведены данные

+-----+-----+-------+
| ID  | NO  | Error |
+-----+-----+-------+
| 200 | 100 |     1 |
| 201 | 100 |     0 |
| 202 |  98 |     1 |
| 203 |  98 |     1 |
| 204 |  99 |     1 |
| 205 |  87 |     1 |
| 206 |  87 |     0 |
| 207 |  90 |     1 |
+-----+-----+-------+

Я хотел бы получить вывод данных, как показано ниже

No

98
99
90

, когда число повторяется в поле 'НЕТ'и ошибка 1 и 0, чем я хочу исключить из результата.

Я борюсь с объединениями и имею запрос количества.

Ответы [ 6 ]

2 голосов
/ 18 октября 2019

Вы также можете сделать это в одном запросе, если вы используете агрегатные функции. Исходя из описанной вами среды, Error может содержать только значение 0 или 1. Таким образом, вы можете просто сгруппировать по NO и убедиться, что минимальное значение для Error никогда не равно нулю.

SELECT NO FROM TableName
GROUP BY NO
HAVING MIN(Error) <> 0
2 голосов
/ 18 октября 2019

Я не на 100% понимаю, о чем спрашивают.

Если я прав, думая, что вам нужны только значения NO, для которых нет ошибки 0, тогда это должно сделатьхитрость:

SELECT `NO`
  FROM errorflag
  WHERE `NO` NOT IN (
                  SELECT `NO`
                    FROM errorflag 
                    WHERE Error = 0)
  GROUP BY `NO`

Вывод:

NO
90
98
99

Sqlfiddle здесь здесь .

2 голосов
/ 18 октября 2019
select  distinct no
from    YourTable yt1
where   not exists
        (
        select  *
        from    YourTable yt2
        where   yt1.no = yt2.no
                and yt2.error = 0
        )

Пример на dbfiddle.co.uk

0 голосов
/ 18 октября 2019

, чтобы исключить идентификаторы, где для NO существует пара 01 - попробуйте следующее

SELECT DISTINCT NO FROM errorflag  
WHERE ID NOT IN 
            (SELECT e1.ID FROM errorflag e1 
                        JOIN errorflag e2 
                            ON (e1.Error = 0 And e2.error = 1 or e2.Error = 0 And e1.error = 1) AND e1.[No] = e2.[no]
            )

. Максимум 2 ошибки на NO?

Не могли бы вы получить ошибки 0,1,1 для NO 99, например?

см. Здесь с изменением

http://sqlfiddle.com/#!18/2d2cf5/3

0 голосов
/ 18 октября 2019

Если флаг error всегда имеет 0 или 1, тогда вы используете not exists:

select ef.*
from errorflag ef
where not exists (select 1 
                  from errorflag ef1 
                  where ef1.no = ef.no and ef1.error <> ef.error
                 );

Только для одного столбца, тогда достаточно только агрегирования:

select no
from errorflag ef
group by no
having count(distinct error) = 1;
0 голосов
/ 18 октября 2019

может быть, вы можете проверить счетчик ошибок = 2 и отчетливую ошибку = 2

  select e.* from errorflag e
  left join (
    select  errono, count(*) num_err_no, count(distinct error) count_error 
    from errorflag 
    group by errono 
    having count(*) =2 and count_error = 2
  ) t on t.errorno = e.errorno 
  where t.errorno is null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...