У меня есть таблица отгрузок, определенная следующим образом (таблица хранится в базе данных HANA, если это необходимо):
CREATE COLUMN TABLE SHIPMENTS (
ShipmentID INT PRIMARY KEY,
Received INT,
Facility NVARCHAR(10),
Item NVARCHAR(20)
);
Здесь столбец «Получено» обозначает момент времени, когда была получена каждая посылка, Объект — место получения посылки, а Товар — содержимое посылки.
Я заполнил его такими данными:
INSERT INTO SHIPMENTS VALUES (1, 0, 'Factory', 'Production machine');
INSERT INTO SHIPMENTS VALUES (2, 0, 'Office', 'Printer');
INSERT INTO SHIPMENTS VALUES (3, 0, 'Factory', 'Coffee maker');
INSERT INTO SHIPMENTS VALUES (4, 1, 'Office', 'Coffee maker');
INSERT INTO SHIPMENTS VALUES (5, 1, 'Factory', 'Fax Machine');
INSERT INTO SHIPMENTS VALUES (6, 2, 'Office', 'Computers');
INSERT INTO SHIPMENTS VALUES (7, 2, 'Factory', 'Fridge');
INSERT INTO SHIPMENTS VALUES (8, 2, 'Factory', 'Freezer');
INSERT INTO SHIPMENTS VALUES (9, 2, 'Office', 'Fax Machine');
Я хотел бы запросить базу данных, чтобы найти в каждый момент времени, какие элементы были получены до этого момента. Основываясь на ответе из другого потока, я начинаю с этого:
SELECT Facility, Received, STRING_AGG (Item, ';') as Items
FROM (
SELECT * FROM SHIPMENTS
ORDER BY Facility, Received
)
GROUP BY Facility, Received
ORDER BY Facility, Received;
что приводит к
| FACILITY | RECEIVED | ITEMS
---------------------------------------------------------
1 | Factory | 0 | Production Machine;Coffee maker
2 | Factory | 1 | Fax Machine
3 | Factory | 2 | Fridge;Freezer
4 | Office | 0 | Printer
5 | Office | 1 | Coffee maker
6 | Office | 2 | Computers;Fax Machine
Тем не менее, я хотел бы этого
| FACILITY | RECEIVED | ITEMS
---------------------------------------------------------
1 | Factory | 0 | Production Machine;Coffee maker
2 | Factory | 1 | Production Machine;Coffee maker;Fax Machine
3 | Factory | 2 | Production Machine;Coffee maker;Fax Machine;Fridge;Freezer
4 | Office | 0 | Printer
5 | Office | 1 | Printer;Coffee maker
6 | Office | 2 | Printer;Coffee maker;Computers;Fax Machine
То есть в каждой строке отображается то, что получено на данный момент, и все, что уже получено. Есть ли хороший способ сделать это в SQL?
SQL Server
, если хотите спросить о HANA? Продукт имеет большое значение. Например, SQL Server имеет оконные функции и может вычислять промежуточную сумму, напримерSUM(TicketCount) OVER (ORDER BY [Date] RANGE UNBOUNDED PRECEDING)
. Вероятно, вы также можете использовать его с STRING_AGG SQL Server 2017. Есть ли в HANA предложение OVER? - person Panagiotis Kanavos   schedule 22.12.2017hana
. Тысячи новых вопросов в минуту. На главной странице отображаются вопросы, основанные на любимых тегах читателя. - person Panagiotis Kanavos   schedule 22.12.2017sql-server
. Как я уже сказал, главная страница фильтрует вопросы. Я показываю этот вопрос только потому, что в моих любимых тегах естьsql-server
иsql
. Тот, у кого естьhana
, не увидит этого. - person Panagiotis Kanavos   schedule 22.12.2017