2016-01-25 2 views
2

У меня есть оператор select и для одного из возвращаемых значений я использую вычисление.SQL Выберите вычисление в разделе where

Что я хотел бы сделать, так это использовать результат вычисления в предложении where. Что-то вроде этого:

SELECT 
ROW_NUMBER()OVER(PARTITION BY val1 ORDER BY val2) AS rnum, 
val3, 
FROM TestDb 
Where (rnum = 1) 

Но это не нравится rnum быть в where.

Я думал о создании таблицы и добавлении к ней. Тогда я смогу select where rnum ..., но это не кажется очень изящным. Есть ли способ лучше?

+0

SELECT * FROM (ваш запрос здесь) WHERE rnum = 1 или использование CTE являются наиболее часто используемыми решениями – Mihai

+0

Можете ли вы отправить схему, а также желаемый результат, который вы ищете? –

+0

Спасибо Mihai - отлично сработал :-) – MartinHayes

ответ

1

Try:

Select * from (
SELECT 
ROW_NUMBER()OVER(PARTITION BY val1 ORDER BY val2) AS rnum, val3 
FROM TestDb)TestDb 
Where (rnum = 1) 
+0

Спасибо, что сработал отлично :-) – MartinHayes

+0

приветствую :) –

2

Вы должны использовать производную таблицу (подзапрос/CTE):

WITH cte AS 
(
    SELECT ROW_NUMBER()OVER(PARTITION BY val1 ORDER BY val2) AS rnum, 
     val3 
    FROM TestDb 
) 
SELECT * 
FROM cte 
WHERE rnum = 1; 

Если вам интересно, почему вы не можете использовать его непосредственно, пожалуйста, прочитайте SQL Condition on Window function

+1

Вам нужно удалить Comma после val3 –

+0

@haytem Да, спасибо – lad2025

Смежные вопросы