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

时间:2019-09-27 02:22:36

标签: sql sql-server

我有一个如下的SQL Server表:

enter image description here

这是我的查询,用于从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。

2 个答案:

答案 0 :(得分:1)

如果您打算为Column2的每个唯一值获取不重复的Column1的计数,则可以完成此操作:

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

答案 1 :(得分:0)

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

  
      
  1. 此查询后应跟group by
  2.   
  3. convert(char, col, 104)将给出yyyy-dd-MM,您需要设置日期参数的格式。
  4.   
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