2017-04-13 53 views
0

的Microsoft Visual Basic應用程序
-
SQL留下GROUP BY JOIN,COUNT & WHERE子句SQL留下了GROUP BY JOIN,COUNT&WHERE子句(VBA)

問題解決了:謝謝分享鏈接@Vityata。以下給出的是其他人蔘考的更正後的代碼。

strSQL = "SELECT A.ID, A.Reason, COUNT(B.TimeStamp)" & _ 
"FROM tblReasons A " & _ 
"Left Join " & _ 
"(" & _ 
"SELECT TimeStamp, Reason FROM tblTracker " & _ 
"WHERE TimeStamp > #04/11/2017# and TimeStamp < #04/14/2017# " & _ 
")B ON A.ID = B.Reason " & _ 
" GROUP BY A.ID, A.Reason" 
+0

據我所知,WHERE子句應該在LEFT JOIN子句之後。 – Rory

+0

@Rory你是對的。我再也沒有得到這個錯誤,但我也沒有得到理想的結果。我無法使JOIN和WHERE子句工作。我試圖得到所有tblReasons.Reason的計數,而不管WHERE是否返回任何tblTracker.TimeStamp。因此,如果在WHERE子句 – illoosions

+0

中未找到任何結果,則應該顯示0計數,如果您從Access中獲取正確的SQL語法開始,那麼它將更容易。如果在Access中的所有工作都能正常工作並且獲得所需的結果,請將sql複製到Excel-VBA ant中,並將其放在您的代碼中。 – Jochen

回答

1

做到以下幾點。

  1. 轉到VBE的直接窗口。 (ctrl + G)。然後粘貼strSQL,並在每行上按回車。 (看下面的圖片)
  2. 然後詢問VBE通過編寫?strsql並按回車鍵來理解整個事情。 (見下圖)
  3. VBE會回答。檢查答案。
  4. 將答案作爲查詢在Access中。
  5. 研究&發現問題。

enter image description here

在一般情況下,我認爲,GROUP BY和LEFT JOIN都有點錯了,但我看到的更多的數據來告訴你。 SQL - Group By with Left Join

+0

嘗試將'HAVING'放在'GROUP BY'後面而不是'WHERE'。玩一下。 – Vityata

+0

另一個想法 - 檢查日期。例如。 04/11 - 是11月4日還是假的?嘗試編寫'#11/04/2017#和#12/04/2017#',它可能會起作用。 – Vityata

+0

只需在表格中嘗試一個簡單的查詢,只需從表格中選擇*從#04/11/2017#和#04/12/2017之間的tblTracker.Timestamp,然後嘗試從那裏進行優化。 – Vityata