Как мне найти результат, который не является нулевым? - PullRequest
2 голосов
/ 01 июня 2010

У меня есть запрос, который возвращает 2+ строки. В этих результатах есть столбец, который мы сейчас можем назвать columnX . Давайте посмотрим на результаты этого примера:

columnX
100
86
85
70
нуль
нуль

Я получаю 6 строк, например, некоторые из них являются нулевыми, а некоторые - не нулевыми. Теперь я хочу просмотреть эти результаты и остановиться, как только найду строку, значение которой равно <> null. Как я могу это сделать?


Дело в том, что всегда так сортируется. Так что если есть нули, они внизу. Это может быть результатом:

columnX
100
86
85
70
нуль
нуль

и это также:

columnX
100
86
85
70

Таким образом, в любом случае я могу найти первые ненулевые строки, которые могут быть нулевыми или нет. 70 в приведенных выше примерах. Я думаю, что CTE - хорошее начало ... но кое-что все еще не хватает. Вот как я получаю эти строки:

select columnx from mytable where someid = 12345

Значит, числа в columnx все вместе (потому что кто-то). Я действительно должен получить первую ненулевую строку из этого результата. Я не могу просто найти первую строку, которая не является нулевой из целого столбца x, я должен использовать условие (где someid = 12345) раньше. 70 - это просто пример, может быть и 90, так что я не могу получить минимальное значение из результатов. Нули всегда внизу, остальные могут быть не отсортированы. Это также может быть результатом:

columnX
100
23
80
78
нуль
нуль

В таком случае я хочу 78.

1 Ответ

3 голосов
/ 01 июня 2010

Я бы использовал CTE (Common Table Expression) для извлечения индекса рядом со столбцом (используя функцию ROW_NUMBER).

Затем вы можете использовать вложенный select, чтобы найти минимальный нулевой индекс, а затем выбрать все, что ниже.

WITH cteMyTable AS
(
    SELECT RUW_NUMBER() OVER (ORDER BY (ColZ) as [Rank], ColumnX
    FROM MyTable
)

SELECT [Rank], ColumnX
FROM cteMyTable WHERE [Rank] < 
   (SELECT MIN([Rank]) FROM cteMyTable WHERE ColumnX IS NULL)

Отредактируйте, следуя вашей дополнительной информации, если вы просто хотите, чтобы все строки, где ColumnX является минимальным значением, вы можете сделать следующее:

SELECT * 
FROM MyTable
WHERE ColumnX = (SELECT MIN(ColumnX) FROM MyTable)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...