Повторный паттерн в кейсах без жесткого кодирования (Netezza SQL) - PullRequest
0 голосов
/ 13 сентября 2018

Есть ли лучший способ создания выражения case без жесткого кодирования?

Например.

            SELECT
                CASE
                        WHEN PRICE BETWEEN 1 AND 10 THEN '$1~$10'
                        WHEN PRICE BETWEEN 11 AND 20 THEN '$11~$20'
                        WHEN PRICE BETWEEN 21 AND 30 THEN '$21~$30'
                        WHEN PRICE BETWEEN 31 AND 40 THEN '$31~$40'
                        WHEN PRICE BETWEEN 41 AND 50 THEN '$41~$50'
                END AS PRICE_RANGE,
                SUM(TRANSACTION_COUNT),
                SUM(TRANSACTION_AMT)
            FROM SALES 
            WHERE
                CLR.DW_NET_PD_AMT BETWEEN 1 AND 10
                OR CLR.DW_NET_PD_AMT BETWEEN 11 AND 20
                OR CLR.DW_NET_PD_AMT BETWEEN 21 AND 30
                OR CLR.DW_NET_PD_AMT BETWEEN 31 AND 40
                OR CLR.DW_NET_PD_AMT BETWEEN 41 AND 50
           GROUP BY 1;

Я пытаюсь классифицировать товары по ценам, основанным на диапазоне цен, как показано выше. Мне нужно классифицировать от 1 до 500 долларов США номиналом 10.

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Я не генерирую серию от $ 1 до $ 500

Но я создаю его во время выполнения.

Предполагается, что вы используете SQL SERVER

SELECT '$'+CONVERT(VARCHAR(100),PRICE/10*10+1)+'~$'+CONVERT(VARCHAR(100),(PRICE/10+1)*10)
0 голосов
/ 14 сентября 2018

Попробуйте это.

SELECT '$' + CAST((@price / 10) * 10 + 1 AS varchar) + '~$' + CAST((@price / 10) * 10 + 10 AS varchar) AS PRICE_RANGE
      ,SUM(TRANSACTION_AMT)
FROM SALES 
WHERE CLR.DW_NET_PD_AMT BETWEEN 1 AND 10
OR CLR.DW_NET_PD_AMT BETWEEN 11 AND 20
OR CLR.DW_NET_PD_AMT BETWEEN 21 AND 30
OR CLR.DW_NET_PD_AMT BETWEEN 31 AND 40
OR CLR.DW_NET_PD_AMT BETWEEN 41 AND 50
GROUP BY 1;
0 голосов
/ 13 сентября 2018

Вы можете переписать ваш запрос следующим образом:

Ваш вывод будет: цена - мод (цена, 10)

SELECT
    price - mod(price, 10) as 'Min limit',
    price + 10 - mod(price, 10) as 'Max limit' ... and so on

Вы можете преобразовать вывод SELECT в строку с вашим шаблоном. Но я сосредоточил внимание на математических выражениях, чтобы уменьшить количество строк кода.

Таким образом, вы можете удалить CASE

...