SQL查询CASE WHEN语句

时间:2014-11-21 17:54:23

标签: 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_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_part命令

enter image description here

1 个答案:

答案 0 :(得分:1)

我猜是这行:

当tr_time&gt; &#39; 75600&#39;或tr_time&lt; &#39; 14400&#39;和tr_loc =&#39; 6-LDT2&#39;那么&#39; 3&#39;

被解释为:

当tr_time&gt; &#39; 75600&#39;或者(tr_time&lt;&#39; 14400&#39;和tr_loc =&#39; 6-LDT2&#39;)然后&#39; 3&#39;

然后会出现第一个条款:

当tr_time&gt; &#39; 75600&#39;

哪个满足OR语句,给出的值为&#39; 3&#39; 。