построить настройки отчета из sql, которые переопределяют значения по умолчанию - PullRequest
1 голос
/ 02 мая 2011

Я пытаюсь создать систему отчетов, которая позволяет пользователям настраивать отчеты, и каждый пользователь может создать собственный отчет поверх сетки данных.

 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 = 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 Ответ

2 голосов
/ 02 мая 2011

Ну, есть несколько способов сделать это, и в некоторой степени это зависит от того, насколько независимым от базы данных вы хотите быть. Примерно так должно работать на большинстве БД:

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 и т. Д. *

Является ли это наилучшим способом построения таблицы или нет, это другой вопрос. Если вы действительно хотите получать отчеты по умолчанию, вам может потребоваться другой подход. Также обратите внимание, что это может не работать, если таблица становится большой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...