2013-01-31 34 views
2

這個功能,我有我想要做什麼,只是想知道如果有一種方法可以做到這一點一氣呵成:選擇並組合使用左()多個表2行

drop table ##aa 
select s.storeid,cast(LEFT(p.paytype,1) as varchar(50)) as Paytype,SUM(amount) as Total 
into ##aa 
from RPTrs s, rpPay p 
where s.storeid=p.StoreID and s.ReceiptNO=p.ReceiptNo 
and trsdate between '1/1/06' and '1/1/13' 
group by s.storeid,LEFT(p.paytype,1) 

update A set a.paytype=b.currencydesc 
from ##aa a, Currencies b 
where a.Paytype=b.POSCurrency 

select * from ##aa order by Paytype, StoreID 

我是什麼問的是,我想將b.CurrencyDesc應用到最初的p.paytype。該Paytype只是顯示C作爲例子,但我希望它放置現金和V簽證以及諸如它是在貨幣表中描述

+0

請不要在日期/時間類型中使用'BETWEEN',[特別是如果您碰巧在SQL Server上](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what (這篇文章解釋了爲什麼這對SQL Server特別危險,但其他RDBMS有相關的擔憂)。坦率地說,我個人認爲這是錯誤的方式來_關於日期/時間值;最好將它們視爲「不精確」的範圍值,類似於處理(十進制)浮點的方式。所以你的結局是在「1/2/13」之前的任何時候。 –

回答

1

好像你可以添加一個JOIN

select s.storeid 
     , b.currencydesc as Paytype 
     , SUM(amount) as Total 
into  ##aa 
from  RPTrs s 

join  rpPay p 
on  s.storeid=p.StoreID 
    and s.ReceiptNO=p.ReceiptNo 

join  Currencies b 
on  b.POSCurrency=cast(LEFT(p.paytype,1) as varchar(50)) 

where trsdate between '1/1/06' and '1/1/13' 
group by s.storeid 
     , b.currencydesc 

轉換使用顯式連接語法。無法確定哪些表格有貢獻trsdate。我不確定在連接條件下需要CAST

+0

在這一點上我不確定你需要'輸入## aa',因爲OP的最後一行是從(假設溫度)表中選擇的。如果是這樣,你錯過了'ORDER BY'。 –

+0

@ Clockwork-Muse我把''放入''中,省略了'ORDER BY',因爲問題是關於結合這兩個步驟。您建議的更改可能會有進一步的幫助,但我會將其留給OP。不說什麼DB;我在猜測MySQL。 – BellevueBob

+0

非常感謝,那已經奏效了。我正在使用MsSQL。我已經拿出臨時表和演員表,因爲他們不再需要。演員表是如此臨時表有空間放入長度超過1個字符的新信息。感謝你的幫助傢伙。 – JohnZ