Sql 组合/连接CASE语句的结果
我正在使用Oracle SQL将客户列表及其交货日期拉入Excel。数据的格式是每个交货日都有自己的记录,因此如果客户10001在周一、周三和周五收到交货,我将返回三条记录(在本例中:2、4、6,因为我们的周从周日开始) 我已经用CASE将它们转换成首字母(M,W,F),但显然还有三条记录 我最初认为这是一个连接问题(我对SQL代码非常陌生),所以我尝试了标准的双管(| |),但这不是同一种连接操作(我知道双管用于连接不同的字段) 这就是我的代码当前所在的位置:Sql 组合/连接CASE语句的结果,sql,oracle,case,Sql,Oracle,Case,我正在使用Oracle SQL将客户列表及其交货日期拉入Excel。数据的格式是每个交货日都有自己的记录,因此如果客户10001在周一、周三和周五收到交货,我将返回三条记录(在本例中:2、4、6,因为我们的周从周日开始) 我已经用CASE将它们转换成首字母(M,W,F),但显然还有三条记录 我最初认为这是一个连接问题(我对SQL代码非常陌生),所以我尝试了标准的双管(| |),但这不是同一种连接操作(我知道双管用于连接不同的字段) 这就是我的代码当前所在的位置: SELECT TRIPS.CU
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)。有成千上万的客户,我目前不得不以一种非常笨拙的方式使用数据透视表来完成这项工作。我想您需要
listag()
:
嗯。这会产生一个ORA 00905缺少关键字的错误。
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