计算结果表中的其他列时如何显示列?
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 中将列设置为今天的日期 [关闭]
Python:如何在比较其他列时将列值填充到另一个数据框中的新列?