HANA - Рассчитать, используя данные из другой строки - PullRequest
0 голосов
/ 18 октября 2018

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

Если KSCHL = Y, то Result будет установлен из KBETR.Если нет, Result будет установлен своим собственным KBETR * KBETR из соответствующей пары ключей (MATNR, WERKS).Пожалуйста, смотрите пример.

MATNR |WERK |КСЧЛ |KBETR |Ожидаемый результат

01 |A |X |10 |200 х 10

01 |A |Y |200 |200

01 |A |Z |15 |200 x 15

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

Спасибо за вашу помощь, очень признателен

Бинь

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Другой вариант - использование аналитической функции SQL First_Value () .

. Вы можете сослаться на данный пример, хотя пример находится на SQL Server, функция имеет тот же характер и синтаксис в HANAбаза данных для разработчика SQLScript

Вот пример запроса SQL для вашей базы данных HANA

select  
    *,
    case 
        when KSCHL = 'Y' 
        then KBETR 
        else
            KBETR * ( first_value(KBETR) over (partition by matnr, werk order by case when kschl = 'Y' then 0 else 1 end) )
    end as Expected
from Table1

Функция first_value () извлекает значение KBETR, упорядоченное оператором CASE (чтобы получить условия Y в началедля функции First_Value) для каждой комбинации MATNR, WERK, определенной с помощью предложения Partition By

Надеюсь, это поможет,

0 голосов
/ 18 октября 2018

Простейший SQL Выберите для этого утверждения следующее, включая самостоятельное объединение без использования функций sql windows

select 
    Table1.*,
    case 
        when Table1.KSCHL = 'Y' 
        then Table1.KBETR 
        else
            Table1.KBETR * t2.KBETR
    end as Expected
from Table1
left join Table1 as t2
    on Table1.matnr = t2.matnr and
       Table1.werk  = t2.werk and
       t2.kschl = 'Y';

Возможная проблема с вашим вопросом:;что произойдет, если есть два типа условия YЯ предполагаю, что вы гарантируете, что будет только одно значение за раз.

...