从sql构建报告设置,覆盖默认值

时间:2011-05-02 17:15:10

标签: sql oracle

我正在尝试构建一个允许用户自定义报告的报告系统,每个用户都可以在数据网格上创建自定义报告。

 ID GRIDID               USER_ID REPORTNAME  REPORTPAYLOAD CREATED            
--- -------------------- ------- ----------- ------------- ------------------ 
  4 CompleteReportView1  User1   Completed   (CLOB)        4/18/2011 8:40:05  
  6 CompleteReportView1  User1   All         (CLOB)        4/18/2011 8:40:48  
 10 CompleteReportView1          Completed   (CLOB)        4/18/2011 8:40:05  
 12 CompleteReportView1          All         (CLOB)        4/18/2011 8:40:48  
 16 CompleteReportView1          Default     (CLOB)        4/18/2011 9:53:38  
 18 CompleteReportView1  User2   Completed   (CLOB)        4/18/2011 8:40:05  
 20 CompleteReportView1  User2   All         (CLOB)        4/18/2011 8:40:48  
 33 CompleteReportView1  User3   Default     (CLOB)        4/18/2011 9:53:38  

我希望特定用户的报告列表包含他们设置的所有报告,以及User_Id的null报告。如果用户的名称报告与user_id = null报告相同,则只返回他们的报告。

以下是我想要返回的数据集: User_Id = User1

 ID GRIDID               USER_ID REPORTNAME  REPORTPAYLOAD CREATED            
--- -------------------- ------- ----------- ------------- ------------------ 
  4 CompleteReportView1  User1   Completed   (CLOB)        4/18/2011 8:40:05  
  6 CompleteReportView1  User1   All         (CLOB)        4/18/2011 8:40:48  
 16 CompleteReportView1          Default     (CLOB)        4/18/2011 9:53:38  

User_Id = User2

 ID GRIDID               USER_ID REPORTNAME  REPORTPAYLOAD CREATED            
--- -------------------- ------- ----------- ------------- ------------------ 
 16 CompleteReportView1          Default     (CLOB)        4/18/2011 9:53:38  
 18 CompleteReportView1  User2   Completed   (CLOB)        4/18/2011 8:40:05  
 20 CompleteReportView1  User2   All         (CLOB)        4/18/2011 8:40:48  

User_Id = User3

 ID GRIDID               USER_ID REPORTNAME  REPORTPAYLOAD CREATED            
--- -------------------- ------- ----------- ------------- ------------------ 
 10 CompleteReportView1          Completed   (CLOB)        4/18/2011 8:40:05  
 12 CompleteReportView1          All         (CLOB)        4/18/2011 8:40:48  
 33 CompleteReportView1  User3   Default     (CLOB)        4/18/2011 9:53:38  

有人可以帮助我需要的SQL吗?如果最有意义的话,我愿意修改表结构。

1 个答案:

答案 0 :(得分:2)

嗯,有几种方法可以做到这一点,在某种程度上,这取决于你想要的数据库无关。这样的东西应该适用于大多数dbs:

select *
from   T
where  USER_ID = :user
union
select *
from   T
where  USER_ID is null
and    REPORTNAME not in (
    select REPORTNAME
    from   T
    where  USER_ID = :user
) 

假设T是上表的名称,:user是User1,User2等......

这是否是构建表的最佳方式是一个不同的问题。如果您真的只想要默认报告,您可能需要一种不同的方法。另请注意,如果表变大,这可能表现不佳。