如何解决基于日期的动态大小写表达式
我有一个 SQL 查询,它有多个条件可以更改 WHERE 子句。我有三个动态更新此 WHERE 子句的 case 表达式。最后两个 case 表达式运行良好。但是,第一个比后两个更具动态性,我遇到了问题。
这是表格中适用于本练习的部分 (Image of Table)
我需要它按如下方式工作: 当我的变量@selection = 1 时,我需要它根据传入的两个日期对我的回报进行排序。 当我的变量 @selection = {any other int} 时,我需要它返回所有日期。
带有描述的查询
...
哪里
{Start Date} = (case when @selection = 1 then {return all values where Start Date 在两个传入的日期之间} else {return all Start Dates})
...
整个查询
DECLARE @selection integer ;
DECLARE @items integer ;
DECLARE @washTypes integer ;
SET @selection = {Root Container.Selection Group.Selection Checkbox.controlValue} ;
SET @items = {Root Container.Items Group.Items Checkbox.controlValue} ;
SET @washTypes = {Root Container.Types of Wash Group.Wash Types Checkbox.controlValue} ;
SELECT
RAW_CIP_records_ndx as 'Index',start as 'Start',stop as 'End',total_duration as 'Total Duration',item as 'Item',wash_type as 'Type of Wash',operator as 'CIP Operator',program_complete as 'Program Fully Completed?'
FROM RAW_CIP_records
WHERE
start = (case when @selection = 1 then (BETWEEN '{Root Container.Start Date.formattedDate}' and '{Root Container.End Date.formattedDate}') else start end)
and
item = (case when @items = 0 then 'Receiving Bay 1' when @items = 1 then 'Receiving Bay 2' when @items = 2 then 'Receiving Bay 3' else item end)
and
wash_type = (case when @washTypes = 0 then 'Regular' when @washTypes = 1 then 'Sanitize' when @washTypes = 2 then 'Acid' else wash_type end)
我可以得到一个简单的 WHERE 子句来处理这两个日期和 BETWEEN 函数。但是,我不知道如何将所有这些传递到 CASE 表达式中。
解决方法
也许是这样的:
WHERE
1 = (case when @selection = 1 then
case when start BETWEEN '{Root Container.Start Date.formattedDate}' and '{Root Container.End Date.formattedDate}' then 1 else 0 end
else 1
end)
and
item = ...
警告:这很可能不会使用任何索引,因此只有在您的情况下性能可以接受时才使用。
,您可以在一个查询中使用 WHERE
条件
WHERE (
@selection = 1 AND (start BETWEEN @startDate and @endDate)
OR @selection <> 1
)
但我建议您最好使用两个单独的查询,因为它更有可能使用索引。
IF @selection = 1
SELECT ...
ELSE
SELECT ...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。