SQL - рассчитать два поля в одном случае - PullRequest
0 голосов
/ 08 мая 2018

У меня есть SQL-запрос, который вычисляет поле следующим образом:

  Select 
         Case When b.xField > 10
         then 20
         when b.xField > 48
         then 10
         else 0
         end as field1
 from (Select CASE WHEN numberChosen < 15
              THEN 10
              WHEN numberChosen > 15
              THEN 48 
              END as xField
        From secondTable) B

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

Пример что-то вроде:

       then 20 AND field2 = yData - 26

поэтому, когда регистр равен 20, тогда есть другое поле, равное yData - 26. Это может быть достигнуто с помощью Cases в Sql? Были ли рассчитаны два поля в одном случае?

Ответы [ 2 ]

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

Я хочу вычислить два поля в одном случае

Вы не можете этого сделать и торговать;.

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

 Select 
     Case When xField > 10
     then 20
     when xField > 48
     then 10
     else 0
     end as field1,
    Case When xField > 10
     then ydata - 26
     else 0
     end as field2

from myData

Или вы можете сгенерировать дополнительное значение поля в запросе оболочки, если действительно трудно вычислить field2

SELECT field1, CASE WHEN field1 > 10 THEN ydata -20 ELSE 0 END field2
  FROM (
    Select 
     ydata, 
     Case When xField > 10
     then 20
     when xField > 48
     then 10
     else 0
     end as field1
  from myData
) subquery
0 голосов
/ 08 мая 2018

Вы можете использовать базовую логику, которая решает, когда field1 = 10 (то есть. xField > 48) во втором случае:

SELECT CASE WHEN xField > 48
            THEN 10
            WHEN xField > 10
            THEN 20
            ELSE 0
       END as field1,
       CASE WHEN xField > 48
            THEN yData - 26
       END as field2
FROM (SELECT CASE WHEN numberChosen < 15
                  THEN 10
                  WHEN numberChosen > 15
                  THEN 48 
             END as xField,
             yData
      FROM secondTable) B

Я изменил порядок вашего случая, потому что установка условия > 10 перед условием > 48 никогда не приведет к удару > 48.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...