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;