Объединение / объединение результатов оператора CASE - PullRequest
2 голосов
/ 16 апреля 2019

Я использую Oracle SQL для вывода списка клиентов и дней их доставки в Excel. Формат данных таков, что каждый день доставки имеет свою собственную запись, поэтому, если клиент 10001 получит поставки в понедельник, среду и пятницу, я верну три записи (в данном случае: 2, 4, 6 с наших недель). начало по воскресеньям).

Я использовал CASE, чтобы преобразовать их в инициалы (M, W, F), но очевидно, что есть еще три записи.

Сначала я думал, что это проблема конкатенации (я ОЧЕНЬ новичок в коде SQL), поэтому я попробовал стандартные двойные каналы (||), но это не тот же тип конкатенации (я выучил двойные каналы) предназначены для объединения различных полей).

Вот где сейчас находится мой код:

SELECT 
TRIPS.CUSTOMER_NO||TRIPS.CUSTOMER_NAME as CUSTOMER, 
CASE
WHEN TRIPS.DAY_NO= 1 THEN 'U'
WHEN TRIPS.DAY_NO= 2 THEN 'M'
WHEN TRIPS.DAY_NO= 3 THEN 'T'
WHEN TRIPS.DAY_NO= 4 THEN 'W'
WHEN TRIPS.DAY_NO= 5 THEN 'R'
WHEN TRIPS.DAY_NO= 6 THEN 'F'
WHEN TRIPS.DAY_NO= 7 THEN 'S'
ELSE '0'
END AS DAYS
FROM DB.TRIPs

В конце я хотел бы, чтобы каждый клиент возвращал одну запись с конкатенацией дней доставки (в данном случае, в MWF). У нас много тысяч клиентов, и мне в настоящее время приходится выполнять эту задачу очень неуклюже, используя сводную таблицу.

1 Ответ

2 голосов
/ 16 апреля 2019

Я думаю, что вы хотите LISTAGG():

SELECT t.CUSTOMER_NO || t.CUSTOMER_NAME as CUSTOMER, 
       LISTAGG(CASE WHEN t.DAY_NO = 1 THEN 'U'
                    WHEN t.DAY_NO = 2 THEN 'M'
                    WHEN t.DAY_NO = 3 THEN 'T'
                    WHEN t.DAY_NO = 4 THEN 'W'
                    WHEN t.DAY_NO = 5 THEN 'R'
                    WHEN t.DAY_NO = 6 THEN 'F'
                    WHEN t.DAY_NO = 7 THEN 'S'
                    ELSE '0'
               END) WITHIN GROUP (ORDER BY t.DAY_NO) as days
FROM DB.TRIPs t
GROUP BY t.CUSTOMER_NO || t.CUSTOMER_NAME
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...