2016-09-20 40 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

相關問題