我有三个专栏
1.order_item_id where datatype is STRING,
2.delivered_date_time where datatype is TIMESTAMP ,
3.status where datatype is string ,
字符串
写一个SQL查询来组合合并特定order_item_id的不同状态,并以分号分隔,order_item_id的第一个delivered_date_time应该排在第一位,order_item_id的第二个delivered_date_time应该排在第二位,依此类推。
我用STRING_AGG和GROUP_CONCAT函数写了一个查询,但它给了我下面的错误-
查询验证失败
Syntax Validation: [PARSING] Error while parsing query line 3:25: no viable alternative at input 'SELECT\n order_item_id,\nSTRING_AGG(status, '; ' ORDER'
型
SQL查询:-
SELECT
order_item_id,
GROUP_CONCAT(status ORDER BY delivered_date_time ASC SEPARATOR '; ') as status_list
//STRING_AGG(status, '; ' ORDER BY delivered_date_time ASC) AS status_list
FROM
Order
GROUP BY
order_item_id;
型
有人能帮我解决这个问题吗?
例如-
order_ITEM_ID status
1 UNDELIVERED
1 IN_PROGRESS
1 REJECTED
1 ready_to_ship
2 APPROVED
2 on_hold
2 null
型
输出:-
order_ITEM_ID status
1 UNDELIVERED;IN_PROGRESS;REJECTED ; ready_to_ship
2 APPROVED;on_hold;null
型
2条答案
按热度按时间xcitsw881#
如果您使用的是SQL Server 2017或更高版本,则可以选择使用
STRING_AGG
函数,如下所示:字符串
在SQL Server 2017之前,我们需要使用
STUFF
函数。有关该函数的更多详细信息,请参阅STRING_AGG documentation
unhi4e5o2#
目前还不清楚问题中的数据库是
SQL Server
还是MySQL
。使用SQL Server:
您可以使用
STRING_AGG
函数来连接状态,并根据delivered_date_time
对它们进行排序。字符串
See this db<>fiddle的一个。
使用MySql:
在MySQL中,使用
GROUP_CONCAT
函数合并每个ID
的状态,并根据其delivered_date_time
对状态进行排序。型
See this db<>fiddle的一个。