2016-08-18 24 views
0

私はADOを使用してExcelをSQLで実行します。 2014,2015,2016,2017,2018,2019,2020SQL UNION ALLエラー

さて、2014年と2015年には満たされているデータの0.2016が半分にデータを記入されています:

は、私は、Excelブックの7つのテーブルを持っています。今日はまだ2016年

あるとして内部で

2017,2018、2019,2020は私が2016年については、ルックアップするときことがわかり、私は

後にすべてのテーブルを結合するためにfrom ...[$2014] UNION ALL from ...[$2014] UNION ALL from ...[$2015] UNION ALL from ...[$2016]....UNION ALL from ...[$2020]を使用し、その後、データがありません統計は完全に間違っています。私は長い間デバッグしています.2017年から2020年にはデータがないという問題を発見しました。2017-2020年にそれぞれ1つの偽の行を追加して問題を解決しました。

しかし、2017-2020年に偽の行を追加する必要があります。

したがって、どのような提案でも問題は完全に解決できますか? (VBA文字列に包まれた)


SQL

SELECT officer, NULL, 
     SUM(IIF(isnumeric(mkt) = true AND Survey='CPI' AND Activity='FI' AND Outcome= 'C', 
      Totalmin, 0)/468), 
     SUM(IIF(isnumeric(Non) = true AND Survey='CPI' AND Activity='FI' AND Outcome= 'C', 
      Totalmin, 0)/468), 
     NULL, NULL, 
     IIF(ISNULL(SUM(mkt)), 0, SUM(mkt)), 
     Sum(Non), SUM(ICP), (SUM(mkt) + SUM(Non) + SUM(ICP)), 
     NULL, NULL, NULL, 
     COUNT(IIF(Survey='CPI' AND Activity='FI', 
      Totalmin, NULL)), 
     NULL, 
     COUNT(IIF(Survey='CPI' AND Activity='FI' AND 
       (Outcome ='C' OR Outcome='D'OR Outcome='O'), Totalmin, NULL)), 
     NULL, 
     SUM(IIF(Survey='CPI' AND Activity='FI',Totalmin, 0)), 
     NULL, 
     SUM(IIF(Survey='CPI' AND Activity='FI' AND 
      (Outcome ='C' OR Outcome='D'), Totalmin, 0)) 

FROM (SELECT officer, rank, year, month, day, survey, activity, 
      outcome, mkt, non, totalmin, ICP, tabledate FROM [2014$] 
     UNION ALL SELECT officer, rank, year, month, day, survey, activity, 
         outcome, mkt, non, totalmin, ICP, tabledate FROM [2015$] 
     UNION ALL SELECT officer, rank, year, month, day, survey, activity, 
         outcome, mkt, non, totalmin, ICP, tabledate FROM [2016$]) as table3 

WHERE officer IS NOT NULL 
AND officer <> '' AND officer <> ' ' 
AND tabledate >= # " & frommDate & "# 
AND tabledate < # " & tooDate & " # 
GROUP BY officer 
+0

あなたは、SQL文でVBAのループを実行することを可能.Is – cha

+0

@chaをExcelファイル内のすべての既存のワークシートを通過する。しかし、それはSQL文であるループ内で動的に 'FROM'部分を構築することができますか? – evabb

+0

いいえ、SQLステートメント – cha

答えて

0

CHAさんのコメントからの擬似コード。

declare SQLunion as string 

for each worksheets 
    if worksheet has data then SQLunion = SQLunion + "select x,y,z from " + worksheet + " union " 
next 

remove the last "union" from SQLunion 
SQLstring = "select a, b, c from (" + SQLunion+ ") where conditions" 
関連する問題