我已经玩了好几天了,似乎想不出什么办法。我有这样的疑问:
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/