Группировать по дате, когда таблица содержит столбцы даты и времени - PullRequest
1 голос
/ 26 октября 2019

У меня есть следующая таблица:

Id | OrderNO | QTY | Station |  DateSt             |  DateEd             | Status |  CreatedDt
1  |   200   |  30 |   ABC   |  10/19/2019 1:00pm  |  NULL               |  NULL  |  10/19/2019 1:00pm
2  |   200   |  30 |   ABC   |  NULL               |  NULL               |  NULL  |  10/19/2019 2:00pm
3  |   200   |  0  |   ABC   |  NULL               |  10/19/2019 3:00pm  |  End   |  10/19/2019 3:00pm

Что я хочу сделать, это получить запрос, чтобы показать сумму столбца Qty и только строки с начальной датой и датой окончания. Примерно так:

OrderNO |  QTY  | Station |  DateSt            | DateEd            |  Status   |  CreatedDt
   200  |   60  |   ABC   |  10/19/2019 1:00pm | NULL              |   NULL    |  10/19/2019 1:00pm
   200  |   0   |   ABC   |  NULL              | 10/19/2019 3:00pm |   End     |  10/19/2019 3:00pm

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

SELECT OrderNO, SUM(QTY), Station, Status
FROM TableName WHERE Status IS NULL
GROUP BY OrderNO, Station, Status
UNION ALL 
SELECT OrderNO, QTY, Station, Status
FROM TableName WHERE Status='End'
GROUP BY OrderNO, Station, Status

Pd. Строка, содержащая Status = 'End', всегда будет иметь Qty = 0 и DateEd datetime. Первая строка, вставленная в мою таблицу, должна содержать DateSt datetime.

Что я могу сделать, чтобы добавить эти столбцы datetime, сохраняя конечный результат, как я ожидаю?

Ответы [ 2 ]

1 голос
/ 26 октября 2019

Можете ли вы использовать функции max или min в столбцах даты в предложении select? Вот так:

select OrderNO, SUM(QTY), Station, Status, max(DateSt)

И вам не нужно помещать его в группу по предложению.

0 голосов
/ 26 октября 2019

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

SELECT OrderNO,
       MAX(CASE WHEN Status IS NULL THEN QTY END) as QTY,
       Station, Status,
       MAX(CASE WHEN Status IS NULL THEN Date END) as DateSt,
       MAX(CASE WHEN Status = 'End' THEN Date END) as DateEn
FROM TableName WHERE Status IS NULL
GROUP BY OrderNO, Station;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...