2015-10-26 131 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