#sql #select #subquery
#sql #выберите #подзапрос
Вопрос:
Скажите, что вам нужно запросить некоторые данные и что есть три поля, подобные следующим (это часть более крупного запроса): Field1
, Field2
, Field3
.
Итак, вы выбираете их следующим образом:
SELECT Field1=MyTable.Field1, Field2=MyTable.Field2, Field3=MyTable.Field3
FROM MyTable
Мне нужно сравнить эти значения и вернуть переменную Result
, которая вычисляется следующим образом:
- 0, если они все одинаковые
- 1/2, если два одинаковых, а одно другое
- 1, если все они разные.
Как я должен реструктурировать свой запрос? Я думаю, что мне нужен подзапрос, но я не уверен, как его структурировать.
Ответ №1:
Вы можете использовать case
:
select (case when field1 = field2 and field1 = field3 then 0
when field1 in (field2, field3) or field2 = field3 then 0.5
else 1
end) as result
Комментарии:
1. Если я сделаю это так, возвращаемые значения не будут связаны ни с каким именем переменной. Куда должно
Result
идти имя переменной?2. подразумевается добавление
as result
3. Проверьте мои изменения. При выборе этим переменным присваивается другое имя. Не приведет ли это к путанице из-за слишком большого количества
=
знаков в запросе?4. @Zizzipupp . , , На самом деле, имена, которые вы присваиваете, такие же, как и столбцы, которые будут заданы в любом случае. Но да, вы должны использовать полные имена столбцов для выражений в
case
.