Проверка на ошибки: Группировка по - PullRequest
0 голосов
/ 28 мая 2018

Я получил запрос, в котором я хочу проверить, есть ли ЛЮБАЯ ошибка для определенного номера (Нет).Если есть 1 или более ошибок, результатом должно быть «да».Если ошибки нет, результатом должно быть «нет».Но мне нужна только 1 строка на номер, а не несколько строк.

См. Приведенный ниже запрос и результат, который я хочу получить:

SELECT CASE WHEN ISNUMERIC(SUB1.ItemNo) != 1 THEN 'ERROR: ItemNo not numeric'
           ELSE 'OK'
       END AS ErrorType, SUB1.No
FROM
(
--123
    SELECT 123 AS No, '123456789' AS ItemNo
    UNION ALL
    SELECT 123 AS No, '123456789x' AS ItemNo
    UNION ALL
    SELECT 123 AS No, '122456789' AS ItemNo
    UNION ALL
--456
    SELECT 456 AS No, '123456789' AS ItemNo
    UNION ALL
    SELECT 456 AS No, '178978788' AS ItemNo
    UNION ALL
    SELECT 456 AS No, '114147787' AS ItemNo
) AS SUB1

- Результат: как он должен выглядетьконец

SELECT 'Yes' AS Error, 123 AS No
UNION ALL
SELECT 'No' AS Error, 456 AS No

1 Ответ

0 голосов
/ 28 мая 2018

Вы можете просто использовать агрегирование:

SELECT (CASE WHEN MIN(ISNUMERIC(SUB1.ItemNo)) = 0 THEN 'ERROR: ItemNo not numeric'
             ELSE 'OK'
        END) AS ErrorType,
       SUB1.No
FROM (SELECT 123 AS No, '123456789' AS ItemNo
      UNION ALL
      SELECT 123 AS No, '123456789x' AS ItemNo
      UNION ALL
      SELECT 123 AS No, '122456789' AS ItemNo
      UNION ALL
      SELECT 456 AS No, '123456789' AS ItemNo
      UNION ALL
      SELECT 456 AS No, '178978788' AS ItemNo
      UNION ALL
      SELECT 456 AS No, '114147787' AS ItemNo
     ) SUB1
GROUP BY SUB1.NO;

В этом контексте MIN() просто проверяет, не являются ли какие-либо значения не числовыми.

...