0

我正在尝试在 SQL 中为以下数据获取百分比完成列。这是我查询的结果。

work_order_no status        orderqty        complete precentcomplete
WO-000076     Approved      20.0000         9        5201725
WO-000076     Approved      20.0000         10       15605175
WO-000078     Approved      12000.0000      200      91258.3333333333
WO-000078     Approved      12000.0000      500      228145.833333333

我需要的是 2 行的结果。第 1 行将是 WO-00076 和完成百分比。第 2 行将是 WO-000078 和完成百分比。以下是我正在使用的查询。

 Select distinct wo.work_order_no,
                wos.status_description,
                wo.order_qty as [ORDERQTY],
                p.good_tot_diff as [COMPLETE],
                (sum(p.good_tot_diff)/wo.order_qty) * 100 as [PERCENTCOMPLETE]
from wo_master as wo,
     process as p,
     wo_statuses as wos,
     so_children as soc,
     so_sales_orders as sos,
     cs_customers as csc
where wo.work_order_no = p.entry_18_data_txt
and wo.work_order_no = soc.work_order_no
and wo.wo_status_id = wos.wo_status_id
and wo.mfg_building_id = @buildid
and wos.wo_status_id = @statusid
group by wo.work_order_no, wos.status_description, wo.order_qty, p.good_tot_diff

所以我希望结果如下

work_order_no status        orderqty        complete precentcomplete
WO-000076     Approved      20.0000         19       0.95
WO-000078     Approved      12000.0000      700      0.005
4

3 回答 3

0

这应该是你想要的。完整的列不应包含在 GROUP BY 中,而应相加。

SELECT DISTINCT wo.work_order_no, wos.status_description, wo.order_qty AS [ORDERQTY], SUM(p.good_tot_diff) AS [COMPLETE], (sum(p.good_tot_diff)/wo.order_qty) * 100 AS [PERCENTCOMPLETE]
FROM wo_master AS wo,
     process AS p,
     wo_statuses AS wos,
     so_children AS soc,
     so_sales_orders AS sos,
     cs_customers AS csc
WHERE wo.work_order_no = p.entry_18_data_txt
  AND wo.work_order_no = soc.work_order_no
  AND wo.wo_status_id = wos.wo_status_id
  AND wo.mfg_building_id = @buildid
  AND wos.wo_status_id = @statusid
GROUP BY wo.work_order_no,
         wos.status_description,
         wo.order_qty;
于 2013-11-13T17:07:52.027 回答
0

尝试这个:

Select wo.work_order_no,
    wos.status_description,
    wo.order_qty as [ORDERQTY],
    SUM(p.good_tot_diff) as [COMPLETE],
    SUM(p.good_tot_diff)/wo.order_qty as [PERCENTCOMPLETE]
from wo_master as wo,
    process as p,
    wo_statuses as wos,
    so_children as soc,
    so_sales_orders as sos,
    cs_customers as csc
where wo.work_order_no = p.entry_18_data_txt
and wo.work_order_no = soc.work_order_no
and wo.wo_status_id = wos.wo_status_id
and wo.mfg_building_id = @buildid
and wos.wo_status_id = @statusid
group by wo.work_order_no, wos.status_description, wo.order_qty
于 2013-11-13T17:04:28.697 回答
0
SELECT A.*, (COMPLETE/wo.order_qty) * 100 as [PERCENTCOMPLETE]
FROM
(
Select distinct wo.work_order_no,
                wos.status_description,
                wo.order_qty as [ORDERQTY],
                SUM(p.good_tot_diff) as [COMPLETE],
from wo_master as wo,
     process as p,
     wo_statuses as wos,
     so_children as soc,
     so_sales_orders as sos,
     cs_customers as csc
where wo.work_order_no = p.entry_18_data_txt
and wo.work_order_no = soc.work_order_no
and wo.wo_status_id = wos.wo_status_id
and wo.mfg_building_id = @buildid
and wos.wo_status_id = @statusid
group by wo.work_order_no, wos.status_description, wo.order_qty 
) A
于 2013-11-13T17:49:00.187 回答