如果值='ADMIN',请摆脱“ where”子句

问题描述 投票:0回答:1

因此,有一个主表(名为Table1),该表中的一列有一个称为公司名称的列。还有另一个名为Account的表,该表中包含人员的用户名和与该用户关联的公司名称。因此,除非他们是管理员,否则仅应显示表1中与用户公司相关的信息。

我正在使用Oracle上的APEX应用程序

我目前有一个看起来像这样的查询:

Select
SUPPLIER,
sum(NUMBER_OF_TICKETS) TICKETS,
round((sum(NUMBER_OF_TICKETS*AMOUNT_PAYABLE__FOREIGN_CUR)*.1),2) COMMISION,
round(sum(NUMBER_OF_TICKETS*AMOUNT_PAYABLE__FOREIGN_CUR),2) TOTAL_SALES,
round((sum(NUMBER_OF_TICKETS*AMOUNT_PAYABLE__FOREIGN_CUR)-(sum(NUMBER_OF_TICKETS*AMOUNT_PAYABLE__FOREIGN_CUR)*.1)),2) COMPANY_OWE,
CURRENCY
FROM TABLE1
WHERE
 Supplier = (select COMPANYNAME from Account where lower(USERNAME)=lower(:APP_USER)) AND
     PURCHASE_DATE_AND_TIME >= TO_DATE(:P2_START)
      AND PURCHASE_DATE_AND_TIME < TO_DATE(:P2_END)+ 1
group by
SUPPLIER,
CURRENCY

我在使用“ WHERE”功能时遇到了麻烦。因为我基本上想拥有一个if ... then ...(或本例中的case语句)哪里如果(((从帐户中下级(USERNAME)=下级(:APP_USER)选择COMPANYNAME =='COMPANY1'AND(从帐户中下级(USERNAME)=下级(:APP_USER)=>'ADMIN'中选择USERTYPE)=='ADMIN']] >然后显示所有行; aka,供应商=(从查询中的低(USERNAME)=低(:APP_USER))的BBAccount中选择公司名称] >>

有人对如何为此编写查询有任何想法吗?我试着做情况语句当语句然后NULL

它不起作用

因此,有一个主表(名为Table1),该表中的一列有一个称为公司名称的列。还有另一个名为Account的表,该表中的用户名是...

因此,有一个主表(名为Table1),该表中的一列有一个称为公司名称的列。还有另一个名为Account的表,该表中包含人员的用户名和与该用户关联的公司名称。因此,除非用户是管理员,否则仅应显示表1中与用户公司相关的信息。

我认为您可以简单地加入-类似于:

SELECT ...
FROM TABLE1 t
INNER JOIN ACCOUNTS a 
    ON  lower(a.username) = lower(:APP_USER)
    AND (a.companyname = t.companyname OR a.usertype = 'ADMIN')
WHERE
    t.purchase_date_and_time >= TO_DATE(:P2_START)
    AND t.purchase_date_and_time < TO_DATE(:P2_END) + 1
GROUP BY ...

ACCOUNTS上的内部联接在那里实现过滤逻辑:用户必须是该用户属于同一公司,或者具有管理员类型。

sql oracle oracle-apex apex-code oracle-apex-5.1
1个回答
0
投票

因此,有一个主表(名为Table1),该表中的一列有一个称为公司名称的列。还有另一个名为Account的表,该表中包含人员的用户名和与该用户关联的公司名称。因此,除非用户是管理员,否则仅应显示表1中与用户公司相关的信息。

© www.soinside.com 2019 - 2024. All rights reserved.