简体   繁体   English

SQL 根据传递的参数查询

[英]SQL query according to parameter passed

I have a condition, where if the parameter passed is US then I want the input_value to be "Hours Calculated", if it is CA then I want it to be "HRS" and "Hours" and if I do not pass anything then all three should be picked.我有一个条件,如果传递的参数是 US,那么我希望 input_value 是“计算的小时数”,如果是 CA,那么我希望它是“HRS”和“小时”,如果我没有传递任何东西,那么所有应该选择三个。

Select element_name
from element_tab JOIN
INPUTVAL_TAB
where ELEMENT_TAB.LEGISLATION_CODE = nvl(:P_LC,ELEMENT_TAB.LEGISLATION_CODE)
AND INPUTVAL_TAB.INPUT_ID = ELEMENT_TAB.INPUT_ID
AND INPUTVAL_TAB.BASE_NAME = DECODE(:p_LC,'US','Hours Calculated','CA','HRS','CA','Hours')

How can the above query be changed so that if i do not pass:p_LC parameter then 'Hours Calculated','HRS' and 'Hours', all three are picked?如何更改上述查询,以便如果我不传递:p_LC 参数,则选择“计算的小时数”、“小时数”和“小时数”,所有三个都被选中?

You can check for a null value:您可以检查 null 值:

AND (
     (:p_LC IS NULL
      AND INPUTVAL_TAB.BASE_NAME IN ('Hours Calculated', 'HRS', 'Hours'))
  OR (:p_LC IS NOT NULL
      AND INPUTVAL_TAB.BASE_NAME = DECODE(:p_LC,'US','Hours Calculated','CA','HRS','CA','Hours'))
)

It might be clearer, for someone maintaining this in the future, to do:对于将来维护此功能的人来说,这样做可能会更清楚:

AND (
     (:p_LC IS NULL AND INPUTVAL_TAB.BASE_NAME IN ('Hours Calculated', 'HRS', 'Hours'))
  OR (:p_LC = 'US' AND INPUTVAL_TAB.BASE_NAME = 'Hours Calculated')
  OR (:p_LC = 'CA' AND INPUTVAL_TAB.BASE_NAME IN ('HRS', 'Hours'))
)

I have already used NVL to check the:p_lc null value我已经使用 NVL 检查了:p_lc null 值

Not relevant, but personally'd I'd prefer to do the first check the same way;不相关,但我个人更愿意以同样的方式进行第一次检查; so rather than:所以而不是:

where ELEMENT_TAB.LEGISLATION_CODE = nvl(:P_LC,ELEMENT_TAB.LEGISLATION_CODE)

I would do:我会做:

where (
  :p_LC IS NULL
  OR ELEMENT_TAB.LEGISLATION_CODE = :p_LC
)

... but that's largely a matter of taste. ......但这主要是一个品味问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 SQL查询根据传递的参数返回1-31的缺勤日期 - SQL Query to return absence date from 1-31 according to parameter passed SQL查询中的条件语句检查作为参数传递的多个值(列表) - Conditional Statements in SQL query to check multiple values (list) passed as parameter 检查查询中传递的参数中是否存在某个值(SQL SERVER) - Check if a certain value exist in the passed parameter in query (SQL SERVER) Unicode 字符串无法通过pymssql以参数形式传递给SQL查询 - Unicode string cannot be passed to SQL query in form of parameter with pymssql SQL Server查询,传递给LEFT或SUBSTRING函数的无效长度参数 - SQL Server query, Invalid length parameter passed to the LEFT or SUBSTRING function 根据 SQL 查询中传递的参数选择 WHERE 后面的部分 - Choose the part after WHERE depending on the parameter passed in SQL query SQL 查询以获取参数中传递的年、季度或月的数据 - SQL Query to fetch data as of the year,quarter or month passed in parameter SQL需要从传递给查询的日期参数中减去某些时间 - SQL need to subtract certain time from date parameter passed into query Teradata-作为参数传递的运行查询 - Teradata - Running query passed as parameter 传递参数的SQL脚本错误 - SQL script error for passed parameter
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM