尝试根据一列的值进行两次 MySQL 计算
Trying to do two MySQL Calculation based on value of one column
我有一个 select 语句,但想评估一个列,如果它包含值 584。我正在尝试通过将其他 3 个列相乘来创建一个名为 total 的新计算列,如果不是 584,则计算基于不同的列
select CASE `d2c_3_csg_batch_in`.`transactioncode` AS `transactioncode`,
`d2c_3_csg_batch_in`.`site` AS `site`,
`d2c_3_csg_employees`.`lastname` AS `lastname`,
`d2c_3_csg_employees`.`firstname` AS `firstname`,
`d2c_3_csg_employees`.`payrate` AS `payrate`,
`d2c_3_csg_batch_in`.`employeecode` AS `employeecode`,
`d2c_3_csg_batch_in`.`jobcode` AS `jobcode`,
`d2c_3_csg_employees`.`CompanyFrequency` AS `CompanyFrequency`,
`d2c_3_csg_batch_in`.`inputunits` AS `inputunits`,
`d2c_3_csg_transactioncodes`.`multiplier` AS `multiplier`,
`d2c_3_csg_transactioncodes`.`payspacewording` AS `payspacewording`,
WHEN `d2c_3_csg_batch_in`.`transactioncode` = '584' THEN `d2c_3_csg_batch_in`.`inputunits` AS `total`
WHEN `d2c_3_csg_batch_in`.`transactioncode` <> '584' THEN `d2c_3_csg_batch_in`.`inputunits` * `d2c_3_csg_employees`.`payrate` * `d2c_3_csg_transactioncodes`.`multiplier` AS `total`
END
from ((`d2c_3_csg_transactioncodes` join `d2c_3_csg_batch_in` on(`d2c_3_csg_transactioncodes`.`code` = `d2c_3_csg_batch_in`.`transactioncode`))
left join `d2c_3_csg_employees` on(`d2c_3_csg_batch_in`.`employeecode` = `d2c_3_csg_employees`.`employeenumber`))
where `d2c_3_csg_batch_in`.`flag` = 'ADD' and `d2c_3_csg_batch_in`.`prp` = 'Y'
group by `d2c_3_csg_batch_in`.`employeecode`,`d2c_3_csg_batch_in`.`transactioncode`
order by `d2c_3_csg_batch_in`.`employeecode` desc,`d2c_3_csg_batch_in`.`transactioncode`
如果
例如
SUM(if (q1.bill = 584,q1.bill - q1.payment,0))AS bal,
SUM(if (q1.bill != 584,q1.payment - q1.bill ,0))AS advpay,
q1 是 table 别名。其他领域都是虚构的
更正点:用case的时候这样写;
CASE WHEN `d2c_3_csg_batch_in`.`transactioncode` = '584'
THEN `d2c_3_csg_batch_in`.`inputunits`
WHEN `d2c_3_csg_batch_in`.`transactioncode` <> '584'
THEN `d2c_3_csg_batch_in`.`inputunits` * `d2c_3_csg_employees`.`payrate` * `d2c_3_csg_transactioncodes`.`multiplier`
END AS `total` -- an alias must be there!
我有一个 select 语句,但想评估一个列,如果它包含值 584。我正在尝试通过将其他 3 个列相乘来创建一个名为 total 的新计算列,如果不是 584,则计算基于不同的列
select CASE `d2c_3_csg_batch_in`.`transactioncode` AS `transactioncode`,
`d2c_3_csg_batch_in`.`site` AS `site`,
`d2c_3_csg_employees`.`lastname` AS `lastname`,
`d2c_3_csg_employees`.`firstname` AS `firstname`,
`d2c_3_csg_employees`.`payrate` AS `payrate`,
`d2c_3_csg_batch_in`.`employeecode` AS `employeecode`,
`d2c_3_csg_batch_in`.`jobcode` AS `jobcode`,
`d2c_3_csg_employees`.`CompanyFrequency` AS `CompanyFrequency`,
`d2c_3_csg_batch_in`.`inputunits` AS `inputunits`,
`d2c_3_csg_transactioncodes`.`multiplier` AS `multiplier`,
`d2c_3_csg_transactioncodes`.`payspacewording` AS `payspacewording`,
WHEN `d2c_3_csg_batch_in`.`transactioncode` = '584' THEN `d2c_3_csg_batch_in`.`inputunits` AS `total`
WHEN `d2c_3_csg_batch_in`.`transactioncode` <> '584' THEN `d2c_3_csg_batch_in`.`inputunits` * `d2c_3_csg_employees`.`payrate` * `d2c_3_csg_transactioncodes`.`multiplier` AS `total`
END
from ((`d2c_3_csg_transactioncodes` join `d2c_3_csg_batch_in` on(`d2c_3_csg_transactioncodes`.`code` = `d2c_3_csg_batch_in`.`transactioncode`))
left join `d2c_3_csg_employees` on(`d2c_3_csg_batch_in`.`employeecode` = `d2c_3_csg_employees`.`employeenumber`))
where `d2c_3_csg_batch_in`.`flag` = 'ADD' and `d2c_3_csg_batch_in`.`prp` = 'Y'
group by `d2c_3_csg_batch_in`.`employeecode`,`d2c_3_csg_batch_in`.`transactioncode`
order by `d2c_3_csg_batch_in`.`employeecode` desc,`d2c_3_csg_batch_in`.`transactioncode`
如果 例如
SUM(if (q1.bill = 584,q1.bill - q1.payment,0))AS bal,
SUM(if (q1.bill != 584,q1.payment - q1.bill ,0))AS advpay,
q1 是 table 别名。其他领域都是虚构的
更正点:用case的时候这样写;
CASE WHEN `d2c_3_csg_batch_in`.`transactioncode` = '584'
THEN `d2c_3_csg_batch_in`.`inputunits`
WHEN `d2c_3_csg_batch_in`.`transactioncode` <> '584'
THEN `d2c_3_csg_batch_in`.`inputunits` * `d2c_3_csg_employees`.`payrate` * `d2c_3_csg_transactioncodes`.`multiplier`
END AS `total` -- an alias must be there!