Lu23 Ответов: 3

Как я могу изменить запрос, чтобы показать информацию, как показано ниже, пожалуйста?


Текущий запрос:

ВЫБИРАТЬ
БТТЛА,
JPNUM,
Макс(ACTFINISH) как PreLastDone
ОТ МАКСИМО."BTV_ZZZ"
ГДЕ
SITEID ='XXXX'
И JPNUM in ( 'A’,B’)
И WOCLASS = 'ZZZ'
И ACTFINISH &ГТ; компания "Новые системы" -3
Группа по BTTLA,JPNUM
Заказ от BTTLA ASC

Что показывает эти данные:

BTTLA PRELASTDONE JPNUM
103 20/12/2019 01:15 A
103 19/12/2019 12:16 B
105 19/12/2019 02:00 A
105 20/12/2019 05:44 B
106 19/12/2019 04:58 A

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

TLA JP: B JP: A
103 19/12/2019 12:16 20/12/2019 01:15
105 20/12/2019 05:44 19/12/2019 02:00

Что я уже пробовал:

ВЫБИРАТЬ
БТТЛА,
JPNUM,
Макс(ACTFINISH) как PreLastDone
ОТ МАКСИМО."BTV_ZZZ"
ГДЕ
SITEID ='XXXX'
И JPNUM in ( 'A’,B’)
И WOCLASS = 'ZZZ'
И ACTFINISH &ГТ; компания "Новые системы" -3
Группа по BTTLA,JPNUM
Заказ от BTTLA ASC

3 Ответов

Рейтинг:
2

MadMyche

Что бы я сделал, так это заполнил временную таблицу исходным запросом, а затем создал второй запрос с 2 экземплярами этой временной таблицы, соединенными с самим собой.

(13:03 UCT)запрос относительно прост, но мне нужно сейчас же отправиться в путь, и у меня нет времени его печатать... Я обновлю этот ответ примерно через час или около того

(15:44 UTC) обновление с образцом кода для приведенного выше

DECLARE @Temp TABLE (Bttla INT, PreLastDone DATETIME, JpNum CHAR(1))

INSERT @Temp  (Bttla, JpNum, PreLastDone)
SELECT BTTLA, JPNUM, MAX(ACTFINISH) as PreLastDone
FROM   MAXIMO."BTV_ZZZ"
WHERE  SITEID ='XXXX'
AND    JPNUM in ('A', 'B')
AND    WOCLASS = 'ZZZ'
AND    ACTFINISH > SYSDATE-3
GROUP BY BTTLA, JPNUM


SELECT	TLA	= a.BTTLA
,	[JP: B]	= b.PreLastDone
,	[JP: A]	= a.PreLastDone
FROM       @Temp  a
INNER JOIN @Temp  b ON a.BTTLA = b.BTTLA
ORDER BY TLA


Рейтинг:
1

OriginalGriff

Выполните запрос дважды, один раз, чтобы собрать только элементы A, а затем добавьте второй, чтобы собрать только элементы B. Затем используйте соединение для значения BTTLA, чтобы объединить их вместе и вернуть в виде одной строки.


Рейтинг:
1

Richard Deeming

Что-то вроде этого должно сработать:

WITH cteSource As
(
    SELECT
        BTTLA,
        JPNUM,
        MAX(ACTFINISH) as PreLastDone
    FROM 
        MAXIMO."BTV_ZZZ"
    WHERE
        SITEID ='XXXX'
    AND 
        JPNUM in ('A', 'B')
    AND 
        WOCLASS = 'ZZZ'
    AND 
        ACTFINISH > SYSDATE-3
    GROUP BY
        BTTLA,
        JPNUM
)
SELECT
    BTTLA As TLA,
    Max(CASE JPNUM WHEN 'A' THEN PreLastDone END) As [JP: A],
    Max(CASE JPNUM WHEN 'B' THEN PreLastDone END) As [JP: B]
FROM
    cteSource
GROUP BY
    BTTLA
ORDER BY
    BTTLA
;