Sql 通过将内容数据更改为标题字段生成报告
您好,我们有一个小项目,用于预订我们的资产。Sql 通过将内容数据更改为标题字段生成报告,sql,oracle,plsql,oracle-apex,Sql,Oracle,Plsql,Oracle Apex,您好,我们有一个小项目,用于预订我们的资产。 我们按照下表1进行保存。 我们希望有类似表2的查询结果,以便进行漂亮的打印 但是我做不到, 如果你以前解决过类似的问题,你能帮助我搜索哪些主题吗 在oracle数据库还是PLSQL中 existing TABLE 1 ASSET_NAME, USER_ID, RESERVATION_PERIOD PS1, 41 , AM PS1, 1 , PM PS2, - , - PS3, - , - PS4, - , - new table
我们按照下表1进行保存。
我们希望有类似表2的查询结果,以便进行漂亮的打印
但是我做不到,
如果你以前解决过类似的问题,你能帮助我搜索哪些主题吗 在oracle数据库还是PLSQL中
existing
TABLE 1
ASSET_NAME, USER_ID, RESERVATION_PERIOD
PS1, 41 , AM
PS1, 1 , PM
PS2, - , -
PS3, - , -
PS4, - , -
new table
TABLE 2
ASSET_NAME, AM, PM
PS1, 41 , 1
PS2, - , -
PS3, (user_id) , (user_id if it is allocated)
PS4, - , -
简单的选择应该是可行的。阅读#案例#分析#连接方式等。注意:下面将有两行PS1,必须使用CONNECT BY子句修改此SQL
INSERT INTO
TABLE2 ( ASSET_NAME,
AM,
PM )
( SELECT
ASSET_NAME,
CASE
WHEN USER_ID IS NOT NULL
AND RESERVATION_PERIOD = 'AM'
THEN
USER_ID
ELSE
NULL
END
AS AM,
CASE
WHEN USER_ID IS NOT NULL
AND RESERVATION_PERIOD = 'PM'
THEN
USER_ID
ELSE
NULL
END
AS PM
FROM
TABLE1 );
非常感谢您的回答,我已经尝试了这个查询,但是它正在生成结果为ASSET\u NAME AM PMPS1 41-PS1-1PS2---PS3---PS4--但是我们的目标是收集单行中的所有单资产数据,如ASSET\u NAME,AM,PMPS1,41,1PS2,-,-如何将两个s1压缩到一行?是的。。将其作为子查询,并使用CONNECTBY子句获取结果
SELECT asset_name
, NVL(MAX(CASE WHEN reservation_period = 'AM' THEN user_id ELSE NULL END), '-') AS am_user_id
, NVL(MAX(CASE WHEN reservation_period = 'PM' THEN user_id ELSE NULL END), '-') AS pm_user_id
FROM table_1
GROUP BY
asset_name;