2017-08-14 7 views
0

クエリからデータが入力されています。私はもともとSQLでデータをフィルタリングしましたが、私の上司が私にしたいことがSQLで可能かどうかは分かりません。 「LOAD_BEERは」列にある場合、私は、列Cの値を集計したいExcelでの計算に基づくデータのフィルタリング

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

。 DBに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' 

結果パワークエリ(タブに結果を移動するの外側)とSQLで可能

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

関連する問題