2017-08-14 77 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