2014-06-18 115 views
0

我想算distinctsExcel的VBA ADODB.Connection的Sql計數distincts

Sub sql(sqlStr As String, PasteRnG As Range) 

Dim con As Object 
Dim rstData As Object 
Dim sDatabaseRangeAddress As String 


    Set con = CreateObject("ADODB.Connection") 
    Set rstData = CreateObject("ADODB.Recordset") 

    con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ActiveWorkbook.FullName & ";Extended Properties = ""Excel 12.0 Macro;HDR=yes"";" 
    rstData.Open sqlStr, con 

    PasteRnG.CopyFromRecordset rstData 

    rstData.Close 
    Set rstData = Nothing 
    Set con = Nothing 

End Sub 

查詢

sql "SELECT DISTINCT `P3`,`P2`,`P1`, COUNT(DISTINCT `P3`) AS countOf FROM [QQ$] ", Worksheets("QQQQ").Range("a3") 

錯誤的

SELECT DISTINCT `P3`,`P2`,`P1`, COUNT(DISTINCT `P3`) AS countOf FROM table; 

但我得到COUNT(DISTINCT P3 )

錯誤

我需要在每個不同的P3

Distinctlist P2 P1 CountOfDistinctInP3 
    111 ,  11, 1, 56pcs. 
    222,  22, 2, 25pcs. 

第4列數得到P3不能爲空!總是有值

但這精品工程,正如我需要

sql "SELECT DISTINCT `P3`, COUNT(`P3`) FROM [QQ$] GROUP BY `P3` ", Worksheets("QQQQ").Range("a3") 

但是,如果沒有P2和P1(((


+0

刪除'distinct'從'計數()' – goseo

+2

我會建議使用'組by',而不是不同的,但我不知道什麼是自己的原始數據,什麼是預期的輸出。一個例子可能有幫助。 –

+0

錯誤您試圖執行不包含指定表達式'P3'作爲agregate函數的一部分的查詢 – user3748026

回答

0

解決了,未聚合的SELECT中的每一列都需要在GRO中UP BY子句

sql "SELECT `P3`, `P2`, `P1`, COUNT(`P3`) FROM [QQ$] GROUP BY `P3`, `P2`, `P1` ", Worksheets("QQQQ").Range("a3") 
+0

DISTINCT是多餘的。 – Kickstart

+0

不,因爲我需要得到明顯的名單 – user3748026

+0

哪些GROUP BY會給你,因此DISTINCT不是必需的。 – Kickstart

0

嘗試下面的查詢

select count (select distinct p3 from table) from table 
+0

此子查詢最多隻能返回一條記錄 – user3748026

0

嘗試:

SELECT DISTINCT `P3`,`P2`,`P1`, COUNT(`P3`) AS countOf FROM table group by `P3` 
+0

不能在GrOUP BY子句中使用聚合函數(COUNT('P3')) – user3748026

0

您的SQL似乎試圖計算P1,P2和P3的每個組合值的P3的不同值的數量。這將只會是0(如果P3爲NULL)或1.然而使用聚合函數(COUNT)將導致所有行減少到1行,因此P3可能有多個值(因此計數較大),但是P1和P2的值將是不確定的(它們可能來自任何行

你可能需要的是這樣的: - 。

SELECT `P2`,`P1`, COUNT(DISTINCT `P3`) AS countOf 
FROM table 
GROUP BY `P2`,`P1`; 

或者,如果你需要的P3

值的列表
SELECT `P2`,`P1`, COUNT(DISTINCT `P3`) AS countOf, GROUP_CONCAT(DISTINCT P3) 
FROM table 
GROUP BY `P2`,`P1`; 

SELECT `P3`, `P2`,`P1`, COUNT(`P3`) AS countOf, GROUP_CONCAT(DISTINCT P3) 
FROM table 
GROUP BY `P3`, `P2`,`P1`; 
+0

第二個示例中嚴重的工程過程。你所要做的就是假裝你沒有使用一個數據庫,這個數據庫允許你不匹配select和group by子句。 –

+0

你失去了我,但我很感興趣。你能擴展你的評論嗎? – Kickstart

+0

查詢表達式COUNT(DISTINCT'P3')中的語法錯誤(缺少運算符) – user3748026