【发布时间】:2021-07-20 11:42:08
【问题描述】:
我是 SQL 新手,我似乎被困在应该很简单的事情上。
假设我有两个包含以下信息的表:
用途:
| Date | User | Metric1 | Metric2 |
|---|---|---|---|
| 2021-07-20 | John Doe | 200 | 400 |
| 2021-07-20 | XYZ | 100 | 180 |
| 2021-07-20 | ABC | 20 | 600 |
原始数据
| Date | Account | Item_ID |
|---|---|---|
| 2021-07-20 10:30:00 | XYZ | 1 |
| 2021-07-20 11:31:00 | XYZ | 2 |
| 2021-07-20 12:30:00 | John Doe | 3 |
| 2021-07-20 13:30:00 | John Doe | 4 |
| 2021-07-20 14:30:00 | ABC | 5 |
我在这里想要实现的是,将这两者结合起来,为员工显示给定日期的 Item_ID 计数:
| Date | User | Metric1 | Metric2 | Counter |
|---|---|---|---|---|
| 2021-07-20 | John Doe | 200 | 400 | 2 |
| 2021-07-20 | XYZ | 100 | 180 | 2 |
| 2021-07-20 | ABC | 20 | 600 | 1 |
可悲的是,以下内容会出现以下错误:
列 Raw_Data.Date 在选择列表中无效,因为它不是 包含在聚合函数或 GROUP BY 子句中。
这是我尝试过的查询:
select
util.*,
count(rd.Item_ID) as Counter
from Utilisation util
join Raw_Data rd
on util.Date = cast(rd.Date as date)
where util.Date>='2021-07-19'
group by util.Date, util.User;
我的主要怀疑是我尝试了错误的联接类型,或者组部分杀死了结果,但是我找不到解决方案。
【问题讨论】:
-
所有字段必须分组或聚合。将您的
select *..替换为select field1, field2...并按所有非聚合字段分组。 -
您不需要在加入中包含帐户吗?
-
@SMor 更新了查询,但没有改变结果。
-
没关系,我很愚蠢 - 在我按非聚合的所有内容分组后它起作用了。谢谢,@Arvo!
标签: sql sql-server