2016-09-20 42 views
0

我想计算一个变量(比如说last_week)并将其添加回我的主数据集(比如new_j)。我设法将它加入到new_j。但是,如果我想现在使用该变量(last_week)进行进一步计算,则无法识别它。这里是我的代码:将新计算的变量添加回SQL中的主数据集

SELECT [Weekkey] AS weekkey 
    ,[article/colour] as prod_id 
    ,[Current MP Department No/Desc] as prod_dept 
    ,[Total Stock] as total_stock 
INTO #new_j 
FROM [J_20160831] --(that’s the db in server and I created a temp db #new_j) 

SELECT prod_id, max(weekkey) as last_week 
into #lastweeksales 
FROM #new_j 
group by prod_id 

select * 
from #new_j 
left join #lastweeksales 
     on #lastweeksales.prod_id = #new_j.prod_id 

所以,我加入了这两个成功的,如果我运行此代码,我看到列LAST_WEEK。现在我想要做的是这样的:

select * 
,case 
     when last_week = max(weekkey) then total_stock 
     else 0 
end as last_stock_position 
from #new_j 

但它说在last_week中找不到new_j。我也尝试了#lastweeksales.last_week,而不仅仅是last_week在最后一段代码中,但它也没有。这里最好的办法是什么?而且,有没有更好的方法来代替它?我期待在最后得到的输出是一个包含以下变量的表:WeekKey,prod_dept,prod_id,total_stock,last_week,last_stock_position

感谢您的帮助!非常感谢。

回答

0

该正常连接的行为..

通过选择此

select * from #new_j left join #lastweeksales 
     on #lastweeksales.prod_id = #new_j.prod_id' 

newj和lastweekales的所有列将显示在相同的顺序(第一new_j列,然后lastweeksales列)。所以' last_week'是lastweeksales的最后一列。

其次,

select *, 
     case when last_week = max(weekkey) then total_stock 
      else 0 
     end as last_stock_position 
from #new_j 
在上述查询

,你正在选择 'LAST_WEEK' 列属于表#lastweeksales。

选择列时要小心。

我猜你的期待,

select a.WeekKey, a.prod_dept, a.prod_id, a.total_stock, b.last_week, 
case 
    when b.last_week = max(a.weekkey) then total_stock 
    else 0 
end as last_stock_position 
from #new_j as a 
left join #lastweeksales as b 
on b.prod_id = a.prod_id 
group by a.weekkey,a.prod_dept,a.prod_id,a.total_stock,b.last_week 
+0

感谢KK,那正是我的问题。如何使用来自#new_j的#lastweeksales和total_stock列中的last_week列来计算新变量。尽管加入这两个数据集都会加入数据集,但仍不会将其作为新数据集存储 - 因此,如何将该组合数据集存储为新数据集? – Shraddha

+0

我已经更新了答案,我想这是有帮助的。请将此标记为答案。 –

+0

谢谢KK!这符合我所寻找的内容,但是,出现此错误 - 列'#new_j.weekkey'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。 :/ – Shraddha

相关问题