Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询CASE WHEN语句_Sql_Sql Server 2012 - Fatal编程技术网

SQL查询CASE WHEN语句

SQL查询CASE WHEN语句,sql,sql-server-2012,Sql,Sql Server 2012,我正在做一个SQL查询,试图通过轮班计算出产量。。。当我运行此查询时。。它将位于5-FG位置的东西返回为移位3。。。这怎么可能呢 SELECT * FROM (select pt_desc1, pt_desc2, tr_part, tr_loc, tr_time, case when custpart = '' then tr_part else custpart end as custpart, sum(tr_qty_loc) as 'Total', CASE WHEN tr

我正在做一个SQL查询,试图通过轮班计算出产量。。。当我运行此查询时。。它将位于5-FG位置的东西返回为移位3。。。这怎么可能呢

SELECT * FROM (select pt_desc1, pt_desc2, tr_part, tr_loc, tr_time, case when custpart = '' then         tr_part else custpart end as custpart, sum(tr_qty_loc) as 'Total', 
CASE WHEN tr_loc = '6-LDT2' then 'Dakkota'
    WHEN tr_loc = '5-FG' then 'Dexsys' end as 'location',
CASE WHEN tr_time > '14400' AND tr_time < '50400' AND tr_loc = '6-LDT2'Then '1'
    WHEN tr_time > '50400' AND tr_time < '75600' AND tr_loc = '6-LDT2' Then '2' 
    WHEN tr_time > '75600' OR tr_time < '14400' AND tr_loc = '6-LDT2' Then '3'
    WHEN tr_time > '21600' AND tr_time < '59400' AND tr_loc = '5-FG' Then '1'
    WHEN tr_time > '59400' or tr_time < '21600' AND tr_loc = '5-FG' Then '2' end as 'Shift'
from tr_hist_sql
join pt_mstr_sql on tr_part = pt_part
join cp_mstr_sql on pt_part = intpart
where tr_loc IN ('5-FG') 
and tr_type = 'rct-wo' 
group by tr_part, pt_desc1, pt_desc2, tr_loc, tr_time, case when custpart = '' then tr_part else      custpart end, CASE WHEN tr_time > '14400' AND tr_time < '50400' AND tr_loc = '6-LDT2' Then '1'
WHEN tr_time > '50400' AND tr_time < '75600' AND tr_loc = '6-LDT2' Then '2' 
WHEN tr_time > '75600' OR tr_time < '14400' AND tr_loc = '6-LDT2' Then '3'
WHEN tr_time > '21600' AND tr_time < '59400' AND tr_loc = '5-FG' Then '1'
    WHEN tr_time > '59400' or tr_time < '21600' AND tr_loc = '5-FG' Then '2'  end,
CASE WHEN tr_loc = '6-LDT2' then 'Dakkota'
    WHEN tr_loc = '5-FG' then 'Dexsys' end
having sum(tr_qty_loc) > 0) as dt
where Shift = 1 or shift = 2 or shift =3
按tr_零件订购


我的猜测是:

当tr_时间>75600或tr_时间<'14400'且tr_loc='6-LDT2'时,则为'3'

被解释为:

当tr_时间>75600或tr_时间<'14400'且tr_loc='6-LDT2'时,则为'3'

然后是第一条:

当tr_时间>75600时


满足OR语句,给出值“3”

请不要使用屏幕截图来传达代码和数据。它们更难阅读,我们必须仔细阅读并重新键入内容以测试响应。复制/粘贴代码和数据更好。当tr_time>75600或tr_time<14400时,突出显示的记录清楚地显示tr_time的值为77530,大于75600,因此返回3。它还显示tr_loc='5-FG'意味着它不应该是3,它只查看第一个子句?那么第二行呢?基本上围绕着整个事情?我的假设是,它会看到OR子句立即得到满足,然后跳过它的后半部分。这就是OR语句的工作方式。您只需要语句的一半即可满足条件,如果立即满足,则不需要继续第二位。将行更改为:当tr_time>75600或tr_time<14400且tr_loc='6-LDT2'时,则“3”起作用!这取决于你想要什么。当tr_time>75600或tr_time<14400且tr_loc='6-LDT2'时,根据我的假设,您需要的是'3'