Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
wkm1925
Posting Yak Master
207 Posts |
Posted - 2008-05-12 : 08:35:56
|
| I've these following tabletblPRKDate_Taken | Time | MainID | Hit---------------------------------------5/1/2008 | 100 | 213 | 2335/1/2008 | 300 | 213 | 2305/1/2008 | 500 | 213 | 2255/1/2008 | 100 | 214 | 1255/1/2008 | 300 | 214 | 3255/1/2008 | 500 | 214 | 2255/2/2008 | 100 | 213 | 4335/2/2008 | 300 | 213 | 2345/2/2008 | 500 | 213 | 1095/2/2008 | 100 | 214 | 5465/2/2008 | 300 | 214 | 2675/2/2008 | 500 | 214 | 207......MainID | StationID | State-----------------------------------213 | 00001 | PRK214 | 00002 | PRK215 | 00003 | SEL216 | 00004 | PER......*StationID is foreign key to tblTempValuetblTempValueStationID | 3MthCumRf | 6MthCumRf | 9MthCumRf----------------------------------------------------00001 | 525.8 | 934.23 | 466.3300002 | 435.5 | 765.34 | 388.9800003 | 644.5 | 899.23 | 766.33.........Requirement-----------1. From tblPRK, each Date_Taken and each MainID will display the MAX hit2. If Date_Taken within 3month, query will display 3MthCumRf column from tblTempValue, If Date_Taken within 6month, query will display 6MthCumRf, if Date_Taken within 9month, query will display 9MthCumRfSo far, i've only below query. I'm lack of using IF Statement in SQL.SELECT t1.MainID,t1.Date_Taken,t1.Time,t1.HitFROM(SELECT ROW_NUMBER() OVER (PARTITION BY MainID, Date_Taken ORDER BY Hit DESC) AS RowNo,*FROM dbo.tblPRK)t1WHERE t1.RowNo=1 ANDt1.Date_Taken>=CONVERT(VARCHAR(10),DATEADD(m,-3,GETDATE()),101) ANDt1.Date_Taken<=CONVERT(VARCHAR(10), GETDATE(), 101)order by t1.MainID,t1.Date_TakenExpected Output---------------Date_Taken | Time | MainID | MaxHit | 3MthCumRf----------------------------------------------------5/1/2008 | 100 | 213 | 233 | 525.85/1/2008 | 300 | 214 | 325 | 435.55/2/2008 | 100 | 213 | 433 | 525.8...... |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-05-12 : 09:41:01
|
| [code]SELECT t.Date_Taken,t.Time,t.MainID,t.Hit AS MaxHit,CASE WHEN DATDIFF(mm,t.Date_Taken,GETDATE()) <=3 THEN tv.3MthCumRf WHEN DATDIFF(mm,t.Date_Taken,GETDATE()) <=6 THEN tv.6MthCumRf WHEN DATDIFF(mm,t.Date_Taken,GETDATE()) <=9 THEN tv.9MthCumRfENDAS CumRfFROM(SELECT ROW_NUMBER() OVER(PARTITION BY Date_Taken,MainID ORDER BY Hit DESC) AS RowNo,*FROM tblPRK)tINNER JOIN LinkTable lON l.MainID=t.MainIDAND t.RowNo=1INNER JOIN tblTempValue tvON tv.StationID =l.StationID[/code] |
 |
|
|
wkm1925
Posting Yak Master
207 Posts |
Posted - 2008-05-12 : 12:21:08
|
| why i put SELECT t.Date_Taken,t.Time,t.MainID,t.Hit AS MaxHit,CASE WHEN DATEDIFF(mm,t.Date_Taken,GETDATE()) <=3 THEN tv.3MthCumRf WHEN DATEDIFF(mm,t.Date_Taken,GETDATE()) <=6 THEN tv.6MthCumRf WHEN DATEDIFF(mm,t.Date_Taken,GETDATE()) <=9 THEN tv.9MthCumRfENDAS CumRf,t1.Hit-CumRf as Diffthere's a error Invalid column name 'CumRf'. I want do calculation on the fly t.Hit-CumRf |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-05-12 : 12:43:36
|
quote: Originally posted by wkm1925 why i put SELECT t.Date_Taken,t.Time,t.MainID,t.Hit AS MaxHit,CASE WHEN DATEDIFF(mm,t.Date_Taken,GETDATE()) <=3 THEN tv.3MthCumRf WHEN DATEDIFF(mm,t.Date_Taken,GETDATE()) <=6 THEN tv.6MthCumRf WHEN DATEDIFF(mm,t.Date_Taken,GETDATE()) <=9 THEN tv.9MthCumRfENDAS CumRf,t1.Hit-CumRf as Diffthere's a error Invalid column name 'CumRf'. I want do calculation on the fly t.Hit-CumRf
You cant use the CumRf alias directly. EIther you have to repeat the CASE WHEN or do like this:-SELECT tmp.Date_Taken,tmp.Time,tmp.MainID,tmp.MaxHit,tmp.MaxHit-tmp.CumRfFROM(SELECT t.Date_Taken,t.Time,t.MainID,t.Hit AS MaxHit,CASE WHEN DATDIFF(mm,t.Date_Taken,GETDATE()) <=3 THEN tv.3MthCumRf WHEN DATDIFF(mm,t.Date_Taken,GETDATE()) <=6 THEN tv.6MthCumRf WHEN DATDIFF(mm,t.Date_Taken,GETDATE()) <=9 THEN tv.9MthCumRfENDAS CumRfFROM(SELECT ROW_NUMBER() OVER(PARTITION BY Date_Taken,MainID ORDER BY Hit DESC) AS RowNo,*FROM tblPRK)tINNER JOIN LinkTable lON l.MainID=t.MainIDAND t.RowNo=1INNER JOIN tblTempValue tvON tv.StationID =l.StationID)tmp |
 |
|
|
wkm1925
Posting Yak Master
207 Posts |
Posted - 2008-05-12 : 21:47:54
|
| Kindest Mr. Visakh16,Tq very much. Your wisdom my inspiration. |
 |
|
|
|
|
|
|
|