Board logo

主題: [求助]請教各位大大一個Sql Server 2000幼幼班的問題? [打印本頁]

發表人: 劭鵬    時間: 2005-5-21 02:27 PM     主題: [求助]請教各位大大一個Sql Server 2000幼幼班的問題?

不好意思...貼在這個版不知道對不對...如果貼錯地方了...還煩請熊大移版!

以下便是小弟想請問各位大大的問題...

@createdate 這個參數的值為 '2005/05',因為要撈出這個月份每天的金額,問題就是要如何撈出這個月份包含前12個月(共13個月)每天的金額呢?如何將 @createdate 這個參數的值變為 '2005/04'、'2005/03'、'2005/02'...

SELECT       
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/01') AS V001,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/02') AS V002,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/03') AS V003,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/04') AS V004,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/05') AS V005,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/06') AS V006,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/07') AS V007,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/08') AS V008,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/09') AS V009,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/10') AS V010,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/11') AS V011,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/12') AS V012,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/13') AS V013,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/14') AS V014,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/15') AS V015,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/16') AS V016,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/17') AS V017,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/18') AS V018,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/19') AS V019,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/20') AS V020,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/21') AS V021,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/22') AS V022,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/23') AS V023,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/24') AS V024,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/25') AS V025,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/26') AS V026,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/27') AS V027,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/28') AS V028,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/29') AS V029,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/30') AS V030,
        (SELECT a.Amount FROM copf021 a WHERE a.createdate = @createdate + '/31') AS V031

[劭鵬 在 2005-5-21 11:28 PM 作了最後編輯]
發表人: jocosn    時間: 2005-5-21 10:36 PM

你的資料庫是哪一種的?
Oracle?  Sql Server 2000? MySQL?
每家支援的語法有差異。
而且"問題就是要如何撈出5月份之前12個月的金額呢?"
可是看語法好像不速這樣。
發表人: Vic    時間: 2005-5-21 11:22 PM

Amount 是每天的amount, 還是以月計算? 因為你說是要"5月份每天的金額", 後來又是"5月份之前12個月的金額", 所以到底是以月, 還是以日來計算?

如果createdate='2005/05', 你可以試比較大小. 如select amount from copf021 where createdate => '2004/05'

不過以上只為猜測~ 如果可以的話, 將整個table的說明po一下~ 這樣比較好給意見~
發表人: 劭鵬    時間: 2005-5-21 11:34 PM

不好意思...因為我描述得不是很清楚...所以好像讓你們誤解了我的意思...

我想問的問題是要如何撈出現在這個月份以及前12個月份(共13個月)每天的Amount...table設計如下圖



[劭鵬 在 2005-5-21 11:36 PM 作了最後編輯]
發表人: Vic    時間: 2005-5-22 09:31 PM

那就是

select seqno, amount from copf021 where createdate => '2004/04'

試試
發表人: 劭鵬    時間: 2005-5-22 10:17 PM

那如果我要將 @createdate 減 1個月 的話要怎麼寫呢?又不能直接將 '2005/05' -1 會有錯誤訊息 " varchar 數值 '2005/05' 轉換成資料型別為 int 的資料行語法錯誤。"
發表人: jocosn    時間: 2005-5-24 04:46 AM


引用:
劭鵬寫到:
那如果我要將 @createdate 減 1個月 的話要怎麼寫呢?又不能直接將 '2005/05' -1 會有錯誤訊息 " varchar 數值 '2005/05' 轉換成資料型別為 int 的資料行語法錯誤。"


劭鵬老大,所以才要問你是用哪一種資料庫啊?你到底是用哪一種資料庫?這麼神秘無法透露?
每種資料庫都有處理日期的函數,所以你查查看用哪一個函數作處理就好了。不需花時間去考慮要怎麼用 SQL 語法,SQL 語法不是萬能的,他不是萬能核子小金剛。:icons8

不然你就自己再設一個 @createdate2 的值  '2005/04'  去處理就好了,為什麼要花這麼偉大的工程去轉換型別去減一個月。:
你這樣做沒好處,因為資料庫你寫久寫爛寫煩了,你就會知道你還要做效能考量分析。你這樣做的效能絕對比我的建議還低。
或許搞語法可以很帥很神,但是如果你是上班族讓你的頭頭看到,你就被電慘了。


解出來的話你再 PO 文讓我們知道你的結果吧。加油!


PS. Amount...table 設計俺實在是看不懂,你的欄位夾雜有中英文,要小心,小心寫久上癮。因為有些資料庫會有編碼問題,小心他的相容性,這種情況你要特別註明,以方便後人維護。尤其是碰到資料庫匯入匯出、轉換資料庫時。

[jocosn 在 2005-5-24 05:01 AM 作了最後編輯]
發表人: 劭鵬    時間: 2005-5-24 07:52 PM

jocosn前輩...不好意思啦...標題我之前有改過了可能您沒有時間仔細看...我的資料庫是Sql Server 2000...

減一個月的方法我今天試出來了...如下:

DATEADD(MONTH,-1, @createdate)

因為我現在在學習 Reporting Services 很多東西都才剛開始...沒有想到效能的問題...只想到要如何將資料撈出來...Table也不是我設計的...

謝謝熊大跟jocosn前輩的幫忙...
發表人: jocosn    時間: 2005-5-24 10:23 PM

不好意思,沒注意到標題。




歡迎光臨 TWed2k (http://twed2k.org/) Powered by Discuz! 4.1.0