2015-10-26 130 views
0

我正在比較兩天的排名。如果老天排名>新的排名則上升,否則下跌,但我在這兩種情況下得到降低使用case語句時SQL語句中的結果不正確

SELECT 
    USERNAME 
    , SUM(IMPROVED) IMPROVED 
    , SUM(DECREASED) DECREASED 
    , SUM(NoChange) NoChange 
    , SUM(TimeLineCOMPLETED) TimeLineCOMPLETED 
     , SUM(TLNotCompleted) TLNotCompleted 
FROM 
(SELECT (k.keyword) 
    ,p.projectname 
    ,pa.username 
    ,CASE 

     WHEN a.currentposition > b.currentposition 
      THEN 1 
     ELSE 0 
     END IMPROVED 
    ,CASE 
     WHEN a.currentposition < b.currentposition 
      THEN 1 
     ELSE 0 
     END DECREASED 
      ,CASE 
     WHEN a.currentposition = b.currentposition 
      THEN 1 
     ELSE 0 
     END NoChange 
    ,CASE 
     WHEN pa.KeywordStatus = 'Stopped' 
      THEN 1 
     ELSE 0 
     END TimeLineCOMPLETED 
     ,CASE 
     WHEN pa.KeywordStatus = 'InProgress' 
      THEN 1 
     ELSE 0 
     END TLNotCompleted 
    ,a.currentposition AS oldposition 
    ,b.currentposition AS newposition 
    ,pa.KeywordStatus AS TimeLineStatus 
    ,k.targetdate 
    ,k.positionExp 
FROM seo.tbl_keywordposition a 
JOIN seo.tbl_keywordposition b ON a.keywordid = b.keywordid 
    AND a.psnupdatedate ='10/5/2015' AND b.psnupdatedate ='10/10/2015' LEFT JOIN tbl_keywords k ON k.keywordid = b.keywordid AND a.keywordid = b.keywordid LEFT JOIN tbl_project p ON p.ProjectId = k.ProjId LEFT JOIN tbl_projAssignment pa ON pa.ProjId = p.ProjectId AND pa.KeywordID = k.keywordid WHERE p.Projectname = 'october_project' AND a.psnupdatedate ='10/5/2015' AND b.psnupdatedate ='10/10/2015' and pa.KeywordStatus!='NULL')INNERQUERY GROUP by USERNAME 

的樣本數據

SELECT * FROM seo.Tbl_KeywordPosition where KeywordId in ('1514','1515') 
PositionId ProjectId KeywordId CurrentPosition PsnUpdateDate  
    31592 129   1514  10    2015-10-05   
    31593 129   1514  11    2015-10-10   
    31594 129   1515  10    2015-10-05   
    31595 129   1515   9    2015-10-10  

電流輸出

USERNAME IMPROVED DECREASED NoChange  
Ananth   0   2   0  

所需輸出

USERNAME IMPROVED DECREASED NoChange  
Ananth   1   1   0  

因爲keywordid 1514 - 舊的等級10和新的等級11,所以應該減少。

keywordid 1515 - 原來的級別,10和新等級9,所以應該對樣品和結果增加

+0

sql server only –

+1

表達式,不是case語句... – jarlh

+0

是CurrentPosition類型數字嗎? – Jayvee

回答

1

的問題是,CurrentPosition爲varchar應該 投(一.currentpostion as int)vs cast(b.currentposition as int)

+0

你簡直是超級棒......我得到了我的解決方案@ jayvee –

0

基地:

SELECT 
    A.KeywordId, 
    CASE WHEN B.CurrentPosition - A.CurrentPosition > 0 THEN 1 ELSE 0 END AS IMPROVED, 
    CASE WHEN B.CurrentPosition - A.CurrentPosition < 0 THEN 1 ELSE 0 END AS DECREASED, 
    CASE WHEN B.CurrentPosition - A.CurrentPosition = 0 THEN 1 ELSE 0 END AS NoChange 
FROM 
(SELECT * FROM seo.Tbl_KeywordPosition 
WHERE KeywordId IN ('1514','1515') AND PsnUpdateDate = '2015-10-05' 
)AS A 
    INNER JOIN (SELECT * FROM seo.Tbl_KeywordPosition 
       WHERE KeywordId IN ('1514','1515') AND PsnUpdateDate = '2015-10-10' 
       ) AS B 
     ON A.ProjectId = B.ProjectId AND A.KeywordId = B.KeywordId 
+0

獲得相同結果 –

+0

keywordID鏈接名稱? (比如1514是Ananth?) –

0

此外,查詢「pa.KeywordStatus!='NULL'」的ON子句將產生不良結果,可能您必須將其設置爲pa.KeywordStatus IS NOT NULL