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