2017-08-14 101 views
0

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

我想吻合在列C中的值,如果“LOAD_BEER”是在列D

由人(F栏)和日(E栏)

组数据。

然后,把每个人的计数值除以该列C中所有值的总和。

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

下面是我使用的数据样本:

enter image description here

下面是我使用的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。

的什么,我试图做的是(人工计算)

史蒂文斯与他在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。如果是这样,那么这将是一个好的开始?

+0

可能与电源查询SQL(移动结果的选项卡之外)。在数据库中创建您的SQL语法并让Excel获取这些值。您的设计将在Excel和DB中完成。关于你的价值观转移到不同的标签,你可能需要编写你自己的程序。 – Isaiah3015

+0

你可以使用你提到的两种方法来做到这一点。我会去SQL解决方案,如果查询返回任何记录,然后我会打印在一个新的工作表。最好在Excel VBA中编写代码,然后让它实际运行两个查询。您将收到包含此报告的信息,以及是否有任何记录的简短报告。 – Ibo

+0

可能吗?这很容易 - 但为什么MySQL标签? – Strawberry

回答

2

会有更多的子查询来实现您的所有需求。以下查询将从您的表中提取所有记录(例如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 
+0

谢谢!它运行良好。我稍微修改了一下数据来移动数据,这很好,再次感谢! – Lampoa