在Excel中基于计算过滤数据

我有来自查询的数据。 我最初用SQL过滤了数据,但是我不确定我的老板是否希望我在SQL中可以做到这一点。

如果“LOAD_BEER”在列D中,我想计算列C中的值。

按人员(F列)和日(E列)分组数据。

然后,把每个人的计数,除以C列中所有那个人当天的价值之和。

如果该值大于0.8,则取出该人当天的所有数据,并将其移至新的表格中。

以下是我正在使用的数据的示例:

在这里输入图像说明

这是我正在使用的SQL:

SELECT TALLY_TRAN_MSTR.LOGON_ID, SUM(TALLY_TRAN_MSTR.FULL_PLLT_QTY), TALLY_TRAN_MSTR.SHIFT_DT,TALLY_TRAN_MSTR.SHIFT_NBR FROM WBR_RW.TALLY_TRAN_MSTR WHERE (TALLY_TRAN_MSTR.PRI_GRP_CD='LOAD_BEER') GROUP BY TALLY_TRAN_MSTR.LOGON_ID, TALLY_TRAN_MSTR.SHIFT_DT, TALLY_TRAN_MSTR.SHIFT_NBR 

SQL显示任何具有“LOAD_BEER”的数据,但它不会将所有数据分开,并查看它是否大于0.8。

我想要做的一个例子是(手动计算)

Stevens在2017年6月15日有7个与他的名字相关的项目。 其中3个是“LOAD_BEER”。 LOAD_BEER的总和为165.所有7个项目的总和为181. 165/181 = 0.91。 0.91> 0.80,所以我想把所有的7个数据点移到一个新的位置,无论是在新的标签上还是我目前所用的标签上的其他位置。

我的问题是:

  1. 我正在尝试在SQL中做什么?

    1.5。 如果是这样,我怎么能做出一个公式?

  2. 这会在VBA中更容易吗?

    2.5。 如果是的话,那将是一个好的开始?

将有更多的子查询来实现您的所有需求。 以下查询将从您的表中提取所有logging(例如,tab_beer – 将其更改为表名),并将结果数据传送到选项卡或VBA中的任何位置,或者使用您使用的任何工具

 WITH cte AS ( SELECT a.logon_id, a.shift_dt, a.shift_nbr, CASE WHEN CAST(a.tally_qty AS DECIMAL(12,2))/CAST(b.total_qty AS DECIMAL(12,2)) > 0.8 THEN 'Y' ELSE 'N' END inc_flg FROM (SELECT logon_id, SUM(full_pllt_qty) tally_qty, shift_dt, shift_nbr FROM tab_beer WHERE pri_grp_cd = 'LOAD_BEER' GROUP BY logon_id, shift_dt, shift_nbr) a INNER JOIN (SELECT logon_id, SUM(full_pllt_qty) total_qty, shift_dt, shift_nbr FROM tab_beer GROUP BY logon_id, shift_dt, shift_nbr) b ON a.logon_id = b.logon_id ) SELECT t.* FROM tab_beer t INNER JOIN cte c ON t.logon_id = c.logon_id WHERE t.shift_dt = c.shift_dt AND t.shift_nbr = c.shift_nbr AND c.inc_flg = 'Y' 

结果

 logon_id full_pllt_qty pri_grp_cd shift_dt shift_nbr 3 1 MOVE 2017-06-15 00:00:00.000 Stevens, TJ 3 2 UNLOAD 2017-06-15 00:00:00.000 Stevens, TJ 3 6 UNLOAD 2017-06-15 00:00:00.000 Stevens, TJ 3 7 UNLOAD 2017-06-15 00:00:00.000 Stevens, TJ 3 49 LOAD_BEER 2017-06-15 00:00:00.000 Stevens, TJ 3 114 LOAD_BEER 2017-06-15 00:00:00.000 Stevens, TJ 3 2 LOAD_BEER 2017-06-15 00:00:00.000 Stevens, TJ