[英]SAP HANA: Not able to generate the required output with COUNT and CASE function IN SQL
这是一个场景,单个用户分配给多个分支(1 到许多)
我想根据分配给该用户的办公室对用户进行分组。 根据分配的办公室,我想在 select 语句中创建 2 列:
分配给该用户的办公室数量
分配给该用户的办公室名称
这是我用 SQL 得到的 output(见下文):
USER_LABEL NUMBER_OFFICE_ASSIGNED BRANCH_ASSIGNED
-------------------------------------------------------------
FARAG 1 HQ
FARAG 1 SCM
FARAG 1 TCD
FARAG 1 TCM
这是我需要的 output:
USER_LABEL NUMBER_OFFICE_ASSIGNED BRANCH_ASSIGNED
-------------------------------------------------------------
FARAG 4 HQ,SCM,TCD,TCM
怎么做?
SQL代码如下:
SELECT us.USER_LABEL ,
count(od.office_id) AS "NUMBER_OFFICE_ASSIGNED",
CASE
WHEN od.OFFICE_ID=4 THEN 'HQ'
WHEN od.OFFICE_ID=5 THEN 'TCM'
WHEN od.OFFICE_ID=6 THEN 'TCD'
WHEN od.OFFICE_ID=7 THEN 'SCM'
WHEN od.OFFICE_ID=8 THEN 'SSAAC'
ELSE 'No branch assigned. Check with Admin'
END AS "BRANCH_ASSIGNED"
FROM VIEW_USER_SETUP us
INNER JOIN USERS_DEPARTMENTS ud
on(us.USER_ID=ud.USER_ID)
INNER JOIN DEPARTMENT_SETUP ds
on(ud.DEPARTMENT_ID=ds.DEPARTMENT_ID)
INNER JOIN DEPARTMENT_OFFICE do
on(ds.DEPARTMENT_ID=do.DEPARTMENT_ID)
INNER JOIN OFFICE_DETAILS od
on(do.OFFICE_ID=od.OFFICE_ID)
WHERE
ds.ACTIVE_STATUS ='Y'
AND
do.ACTIVE_STATUS='Y'
AND
od.ACTIVE_STATUS='Y'
AND
us.ACTIVE_STATUS ='Y'
AND
us.USER_TYPE ='D'
AND
us.USER_LABEL NOT IN('Emergency Room','General Doctor','General Doctor Oph')
GROUP BY
us.USER_LABEL,
od.OFFICE_ID
ORDER BY
us.USER_LABEL ASC;
首先,您应该从GROUP BY
子句中删除od.OFFICE_ID
,因为最终您不想按OFFICE_ID
进行分组。 此更改要求您对CASE
投影应用聚合,因为它使用OFFICE_ID
。 基于您所需的 output 的正确聚合方法是 function STRING_AGG 。
结果语句看起来像
SELECT
us.USER_LABEL ,
count(od.office_id) AS "NUMBER_OFFICE_ASSIGNED",
STRING_AGG(CASE .... END, ',') AS "BRANCH_ASSIGNED"
FROM ...
WHERE ...
GROUP BY
us.USER_LABEL
ORDER BY
us.USER_LABEL ASC;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.