我有一个如下的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。
答案 0 :(得分:1)
如果您打算为Column2的每个唯一值获取不重复的Column1的计数,则可以完成此操作:
SELECT Column2, COUNT(distinct Column1) AS CountCol1
FROM MyTable
GROUP BY Column2
HAVING (....)
WHERE (....)
答案 1 :(得分:0)
我在这里发现了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