2016-08-18 3 views
0

Excel에서 SQL을 실행하는 데 ADO를 사용합니다. 2014201520162017201820192020SQL 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에 가짜 행 하나를 추가하여 문제가 해결되도록합니다.

그러나 2017-2020 년에 가짜 행을 추가해야하는 것은 귀찮습니다.

따라서 어떤 제안이라도 완전히 문제를 해결할 수 있습니까? (A 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

당신은 – cha

+0

@cha를 Excel 파일에있는 기존의 모든 워크 시트를 통과 루프에서 동적으로'FROM' 부분을 구축 할 수 있습니다하지만 그것은 SQL 문에서 VBA 루프를 실행할 수 됐나 SQL 문에? – evabb

+0

아니, 나는 당신이 SQL 문을 – cha

답변

0

차의 코멘트에서 의사 코드.

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"