我在一家大型建筑公司工作,最近我实施了一个工具跟踪系统。我正在构建与软件接口的报告。
工具分为最高级别的两个分类,无论是分箱还是个人。装箱物品是扳手,螺丝刀等工具,并为所有工具分配一个条形码。单个工具价值很高,并且分配了单独的条形码(因此名称)。
我正在制作的报告旨在显示检查特定工作的所有工具的价格以及总计。我的问题是在签出列中将各个项目视为NULL
。因此,当我尝试查找我使用的工具(out_qty * price) AS TotalValue
的总价值时。但由于out_qty
对于单个工具而言是NULL
,因此TotalValue
字段中没有值,因此难以对总计进行求和。
我确信这很容易解决,但我无法弄明白。
SELECT t.bcode, t.des, t.asset_num, t.model, t.sn, t.bin, t.consumable,
t.status, t.price, ch.outdte, f.fac, cl.loc, ch.bin_qty,
h.notes as hist_note, sl.loc as storloc, sf.fac as storfac,
rtrim(e2.lname) + ', ' + rtrim(e2.fname) + ' - ' + rtrim(e2.bcode) AS empname,
FORMAT(t.price * h.bin_qty, "Currency") AS TotalValue
FROM ((((((t_tool t inner join t_checkout ch on t.tool_id = ch.tool_id)
LEFT JOIN t_loc cl on ch.loc_id = cl.loc_id)
LEFT JOIN t_fac f on cl.fac_id = f.fac_id)
LEFT JOIN t_loc sl on sl.loc_id = t.storloc_id)
LEFT JOIN t_fac sf on sf.fac_id = sl.fac_id)
LEFT JOIN t_emp e2 on cl.emp_id = e2.emp_id)
LEFT JOIN t_hist h
on (h.tool_id = ch.tool_id and h.loc_id = ch.loc_id and h.dte = ch.outdte)
WHERE cl_loc.id{*loc_id}
UNION
SELECT t.bcode, t.des, t.asset_num, t.model, t.sn, t.bin, t.consumable,
t.status, t.price, t.outdte, f.fac, cl.loc, null as bin_qty,
h.notes as hist_note, sl.loc as storloc, sf.fac as storfac,
rtrim(e2.lname) + ', ' + rtrim(e2.fname) + ' - ' + rtrim(e2.bcode) as empname,
FORMAT(t.price * h.bin_qty, "Currency") AS TotalValue
FROM (((((t_tool t left join t_loc cl on t.chkloc_id = cl.loc_id)
LEFT JOIN t_fac f on cl.fac_id = f.fac_id)
LEFT JOIN t_loc sl on sl.loc_id = t.storloc_id)
LEFT JOIN t_fac sf on sf.fac_id = sl.fac_id)
LEFT JOIN t_emp e2 on cl.emp_id = e2.emp_id)
LEFT JOIN t_hist h
on (h.tool_id = t.tool_id and h.loc_id = t.chkloc_id and h.dte = t.outdte)
WHERE cl_loc.id{*loc_id}
ORDER BY des
答案 0 :(得分:0)
如果这是SQL Server,您可以使用ISNULL函数
所以你的计算是:
(ISNULL(out_qty,0) * price) AS TotalValue
如评论中所述,Oracle使用NVL ......
(NVL(out_qty,0) * price) AS TotalValue
0(零)默认值表示您想在out_qty为NULL时使用零