[英]Query to get data from a table as column names in another table
我创建了一些示例表和数据来尝试LISTAGG
SELECT SALE_TITLE, addr_id, addr_name, addr_desc
, LISTAGG(SALES_ID, ',')
WITHIN GROUP (ORDER BY SALES_ID)
AS SALES_ID
FROM (select a.addr_id, a.addr_name, a.addr_desc,
b.SALES_ID, b.SALE_TITLE,
ROW_NUMBER () OVER (ORDER BY b.SALES_ID ) rn,
COUNT (*) OVER () cnt
from palm.adrss a, palm.sales b
where a.addr_id = b.addr_id)
GROUP BY SALE_TITLE, addr_id, addr_name, addr_desc;
当我运行上面的查询时,我的结果集如下
+-----------------+----------+-----------+--------------+-------------+
| SALE_TITLE | ADDR_ID | ADDR_NAME | ADDR_DESC | SALES_ID |
+-----------------+----------+-----------+--------------+-------------+
| Role | 2 | saty | local test | 14,34 |
| Entitlement | 2 | saty | local test | 22,42 |
| Role | 3 | vasu | portal | 14,34 |
| Entitlement | 3 | vasu | portal | 22,42 |
| Role | 4 | sand | Golden gate | 144,344 |
| Entitlement | 4 | sand | Golden gate | 224,424 |
| Role | 5 | Gou | Data Modeler | 144 |
| Suffix | 5 | Gouri | Data Modeler | 224,424 |
| Entitlement | 5 | Gou | Data Modeler | 344 |
| Role | 6 | Mad | Data Analyst | 144 |
| Entitlement | 6 | Mad | Data Analyst | 224,344,424 |
+-----------------+----------+-----------+--------------+-------------+
现在使用此结果集,我想编写另一个查询以获取如下所示的结果集。 在此角色中,权利,后缀将是列名,并且在其下具有sale_id
+---------------+--------------+---------+----------------------+---------+
| ADDR_NAME | ADDR_DESC | Role | Entitlement | Suffix |
+---------------+--------------+---------+----------------------+---------+
| saty | local test | 14,34 | 22,42 | |
| vasu | portal | 14,34 | 22,42 | |
| sand | Golden gate | 144,344 | 224,424 | |
| Gou | Data Modeler | 144 | 344 | 224,424 |
| Mad | Data Analyst | 144 | 224,344,424 | |
+---------------+--------------+---------+----------------------+---------+
请让我知道是否可行,并提供一些意见
提前致谢
我看到您在示例数据上有错字,如果修复它,您将得到所需的输出。
update Your_Table
set ADDR_NAME='Gou'
where ADDR_NAME='Gouri'
您的查询应为:
select t1.ADDR_NAME,t1.ADDR_DESC,
max(case when t1.SALE_TITLE='Role' then t2.SALES_ID end) 'Role',
max(case when t1.SALE_TITLE='Entitlement' then t2.SALES_ID end) 'Entitlement',
max(case when t1.SALE_TITLE='Suffix' then t2.SALES_ID end) 'Suffix'
from Your_Table t1
join Your_Table t2
on t1.ADDR_ID=t2.ADDR_ID and t1.SALE_TITLE=t2.SALE_TITLE
group by t1.ADDR_NAME,t1.ADDR_DESC
order by Role
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.