sql - 为不存在日期的每个组获取额外的行

标签 sql join

我已经玩了好几天了,似乎想不出什么办法。我有这样的疑问:

select 
  v.emp_name as Name
  ,MONTH(v.YearMonth) as m 
  ,v.SalesTotal as Amount
from SalesTotals

这给了我这些结果:

 Name         m         Amount
 Smith        1         123.50
 Smith        2          40.21
 Smith        3         444.21
 Smith        4          23.21
 Jones        1         121.00
 Jones        2         499.00
 Jones        3          23.23
 Jones        4          41.82
 etc....

我需要做的是使用 JOIN 或其他东西,这样我就可以为每个月(1-12)获得一个 NULL 值,每个名称:

 Name         m         Amount
 Smith        1         123.50
 Smith        2          40.21
 Smith        3         444.21
 Smith        4          23.21
 Smith        5           NULL
 Smith        6           NULL
 Smith        ...         NULL
 Smith        12          NULL
 Jones        1         121.00
 Jones        2         499.00
 Jones        3          23.23
 Jones        4          41.82
 Jones        5           NULL
 Jones        ...         NULL
 Jones        12          NULL
 etc....

我有一个“数字”表,并尝试这样做:

select 
  v.emp_name as Name
  ,MONTH(v.YearMonth) as m 
  ,v.SalesTotal as Amount
from SalesTotals
   FULL JOIN Number n on n.Number = MONTH(v.YearMonth) and n in(1,2,3,4,5,6,7,8,9,10,11,12)

但这只给了我 6 个额外的 NULL 行,而我想要的实际上是每组名称有 6 个 NULL 行。我尝试过使用 Group By,但不确定如何在这样的 JOIN 语句中使用它,甚至不确定这是否是正确的路线。

非常感谢任何建议或指导!

最佳答案

这是一种方法:

select 
  s.emp_name as Name
  ,s.Number as m 
  ,st.salestotal as Amount
from (
  select distinct emp_name, number
  from salestotals, numbers 
  where number between 1 and 12) s left join salestotals st on 
    s.emp_name = st.emp_name and s.number = month(st.yearmonth)

关于sql - 为不存在日期的每个组获取额外的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23569752/

相关文章:

php - 多种数据类型 - 一张表与多个表

sql - 从存储过程执行SQL Server代理作业并返回作业结果

python - 如何使用 SQL 从秒列创建日期和小时列

join - Hive 0.13 分桶映射连接

python - 在不同的目录中合并 pandas csv

SQL-Select 组合时会出现错误

mysql - 搜索带有特定标签的帖子

mysql - 内连接 : add up amounts with same id

mysql - 返回 SQL 中的所有连接行

sql-server - 通过联接表查找聚合-SQL SERVER