sql - 基于日期的动态案例表达
问题描述
我有一个 SQL 查询,它有多个将更改 WHERE 子句的条件。我有三个动态更新此 WHERE 子句的 case 表达式。最后两个 case 表达式运行良好。但是,第一个比后两个更有活力,我遇到了问题。
这是适用于本练习的表格部分(表格 图像)
我需要它按如下方式工作:当我的变量 @selection = 1 时,我需要它根据传入的两个日期对我的回报进行排序。当我的变量 @selection = {any other int} 时,我需要它来返回所有日期.
带有描述的查询
...
WHERE
{开始日期} =(@selection = 1 时的情况,然后 {返回开始日期在传入的两个日期之间的所有值} else {返回所有开始日期})
...
整个查询
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 = ...
警告:这很可能不会使用任何索引,因此只有在您的情况下性能可以接受时才使用。
推荐阅读
- reactjs - 是否有一个调试工具可以知道什么 LoC 正在改变你在 React 中的 prop/state?
- haskell - 为什么这段代码在使用 parsec 时会产生解析异常,但在 Graham Huttons 简单示例库中却没有?
- python - 将打印输出保存到图中
- c# - InvalidOperationException 不正确的内容类型:
- firebase - 找不到正确的提供者
- > 在此 CustomerHomePage 小部件上方
- angular - 状态响应:404 Not Found with post request
- laravel - Laravel - Algolia:多个搜索位置
- flutter - Flutter-如何不一遍又一遍地调用同一个服务?
- post - 仅使用 SameSite Lax cookie 进行 SSO 的可行性?
- amazon-web-services - 将 Amazon Redshift 连接到 PowerBI - 错误消息