计算结果表中的其他列时如何显示列?

Posted

技术标签:

【中文标题】计算结果表中的其他列时如何显示列?【英文标题】:How to show a column when count other column in result table? 【发布时间】:2019-09-27 02:22:36 【问题描述】:

我有一个如下的 SQL Server 表:

这是我从 MyTable 获取数据的查询:

SELECT COUNT(distinct Column1) AS CountCol1 
FROM MyTable  
WHERE ((CONVERT(CHAR, Column2, 104) = '27.09.2019') 
       OR (CONVERT(CHAR, Column2, 104) = '28.09.2019'))

在结果表中,我不仅要显示 Column1 的计数,还要显示 Column2 的值。

当我尝试将查询更改为:

SELECT COUNT(DISTINCT Column1) AS CountCol1, Column2 AS Col2  
FROM MyTable  
WHERE ((CONVERT(CHAR, Column2, 104) = '27.09.2019') 
       OR (CONVERT(CHAR, Column2, 104) = '28.09.2019'))

我收到一条错误消息:

列“MyTable.Column2”在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

请帮助我解决此问题并在我的结果表中显示 Column2。

【问题讨论】:

您的日期过滤器似乎不起作用,` (CONVERT(CHAR, Column2, 104)` 将产生yyyy-MM-dd 【参考方案1】:

如果您的目的是获取 Column2 的每个唯一值的不同 Column1 的计数,则可以这样做:

SELECT Column2, COUNT(distinct Column1) AS CountCol1
FROM MyTable
GROUP BY Column2
HAVING (....)
WHERE (....)

【讨论】:

当您对 Column2 进行分组时,您的查询是否确保获得正确的 Column1 计数? 我的意思是当你对 Column2 进行分组时,它会影响 Column1 的计数。例如,如果我们进行物理检查并看到 Column1 出现了 4 次,但在结果表中它只得到 2。如果这是因为我们将 Column2 分组并给出了错误的结果。 此查询将获取 Column2 的每个唯一值的不同 Column1 的计数,试一试。 没有 GROUP BY 子句的聚合函数将始终返回整个表的聚合,这意味着它只会返回一行,这是您想要的吗? 然后用一个例子提到了你期望的输出。【参考方案2】:

我在这里发现了 2 个问题。

    这个查询后面应该跟group by convert(char, col, 104) 会给出yyyy-dd-MM,你需要格式化你的日期参数。
SELECT COUNT(distinct Column1) AS CountCol1
    , Column2 As Col2  
FROM MyTable  
WHERE dateadd(dd, 0, dateadd(dd, 0, Column2))
   in (convert(datetime, '27.09.2019', 104), convert(datetime, '28.09.2019', 104))
GROUP BY Column2

【讨论】:

以上是关于计算结果表中的其他列时如何显示列?的主要内容,如果未能解决你的问题,请参考以下文章

当用户在 MS Access 中修改表中的另一列时,如何在 SQL Server 中将列设置为今天的日期 [关闭]

尝试从 MySql 中的不同表中选择列时出错

使用两个索引列时缓慢的 mySQL 查询

Python:如何在比较其他列时将列值填充到另一个数据框中的新列?

sql server 如何改变计算结果的值 如null改变为0

如何使用列号从 MySQL 中的表中删除列