【问题标题】:Excel vba ADODB.Connection Sql Count distinctsExcel vba ADODB.Connection Sql Count distinct
【发布时间】:2014-06-18 11:47:20
【问题描述】:

我正在尝试计算差异

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(DISTINCTP3) 上遇到错误

我需要输入每个 DISTINCT P3 的第 4 列计数

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

P3 不能为空!!!永远有价值

但这很好用,就像我需要的那样

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

但没有 P2 和 P1 (((


【问题讨论】:

  • count()中删除distinct
  • 我建议使用 group by 而不是 distinct ,但我不确定您的原始数据是什么以及预期的输出是什么。一个例子可能会有所帮助。
  • 错误您尝试执行的查询不包含指定表达式 P3 作为聚合函数的一部分
  • 你的第四列叫什么?您想要计算它的所有值还是所有不同的值?

标签: sql count distinct ado


【解决方案1】:

试试下面的查询

select count (select distinct p3 from table) from table

【讨论】:

  • 该子查询最多只能返回一条记录
【解决方案2】:

尝试:

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

【讨论】:

  • GrOUP BY 子句中不能有聚合函数 (COUNT(P3))
【解决方案3】:

您的 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`;

【讨论】:

  • 第二个例子严重过度设计。您所要做的就是假装您没有使用允许您不匹配 select 和 group by 子句的数据库。
  • 你失去了我,但我很感兴趣。你能扩展你的评论吗?
  • 查询表达式 COUNT(DISTINCT P3) 中的语法错误(缺少运算符)
  • 我在仔细查看所需输出之前编写了它。现在我不明白这个问题。
  • 我看不到它的错误。您在哪个查询中遇到错误?您可以发布您的表格声明和一些示例数据行,以及您希望输出与该数据一起使用的内容吗?
【解决方案4】:

已解决,SELECT 中未聚合的每一列都需要在 GROUP BY 子句中

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

【讨论】:

  • DISTINCT 是多余的。
  • 不,因为我也需要获取不同的列表
  • GROUP BY 将为您提供哪个,因此不需要 DISTINCT。
猜你喜欢
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 2016-01-14
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 2014-11-07
  • 1970-01-01
相关资源
最近更新 更多