2016-02-25 96 views
0

我已经使用Max和Case函数加入了三个表格。如何在三个表中使用MAX和Case函数?

当我使用两个表时,它工作正常,但是当我添加第三个表时,我得到了这个错误。

歧义列名'Month'。

SELECT Category , 
     KPI , 
     TDTargetValue , 
     MAX(CASE WHEN Month = 'Jan' THEN Input 
      END) Jan , 
     MAX(CASE WHEN Month = 'Feb' THEN Input 
      END) Feb , 
     MAX(CASE WHEN Month = 'Mar' THEN Input 
      END) Mar , 
     MAX(CASE WHEN Month = 'Apr' THEN Input 
      END) Apr , 
     MAX(CASE WHEN Month = 'May' THEN Input 
      END) May , 
     MAX(CASE WHEN Month = 'Jun' THEN Input 
      END) Jun , 
     MAX(CASE WHEN Month = 'Jul' THEN Input 
      END) Jul , 
     MAX(CASE WHEN Month = 'Aug' THEN Input 
      END) Aug , 
     MAX(CASE WHEN Month = 'Sep' THEN Input 
      END) Sep , 
     MAX(CASE WHEN Month = 'Oct' THEN Input 
      END) Oct , 
     MAX(CASE WHEN Month = 'Nov' THEN Input 
      END) Nov , 
     MAX(CASE WHEN Month = 'Dec' THEN Input 
      END) Dec 
FROM [NEWSEMAKPI].[dbo].[NewCriteria] NC 
     INNER JOIN (SELECT * 
        FROM [NEWSEMAKPI].[dbo].[UpdateData] 
        WHERE PeriodId = '1' 
        ) UD ON UD.Cid = NC.Id 
     LEFT JOIN (SELECT * 
        FROM [NEWSEMAKPI].[dbo].[TargetData] 
       ) TD ON UD.Cid = TD.CId 
WHERE NC.Grade = 'A' 
     AND IsActived = '0' 
GROUP BY Category , 
     KPI , 
     TDTargetValue 
ORDER BY 1 

任何帮助,将不胜感激。

+0

错误消息说,'Month'列存在于**多个表**在'JOIN'中出现,所以请使用**别名**来限定列 –

+0

谢谢。我会弄清楚。 – user3538475

回答

0

添加alias也为列...月

假设NewCriteria表有列Month

SELECT Category , 
     KPI , 
     TDTargetValue , 
     MAX(CASE WHEN NC.Month = 'Jan' THEN Input 
      END) Jan , 
     MAX(CASE WHEN NC.Month = 'Feb' THEN Input 
      END) Feb , 
     MAX(CASE WHEN NC.Month = 'Mar' THEN Input 
      END) Mar , 
     MAX(CASE WHEN NC.Month = 'Apr' THEN Input 
      END) Apr , 
     MAX(CASE WHEN NC.Month = 'May' THEN Input 
      END) May , 
     MAX(CASE WHEN NC.Month = 'Jun' THEN Input 
      END) Jun , 
     MAX(CASE WHEN NC.Month = 'Jul' THEN Input 
      END) Jul , 
     MAX(CASE WHEN NC.Month = 'Aug' THEN Input 
      END) Aug , 
     MAX(CASE WHEN NC.Month = 'Sep' THEN Input 
      END) Sep , 
     MAX(CASE WHEN NC.Month = 'Oct' THEN Input 
      END) Oct , 
     MAX(CASE WHEN NC.Month = 'Nov' THEN Input 
      END) Nov , 
     MAX(CASE WHEN NC.Month = 'Dec' THEN Input 
      END) Dec 
FROM [NEWSEMAKPI].[dbo].[NewCriteria] NC 
     INNER JOIN (SELECT * 
        FROM [NEWSEMAKPI].[dbo].[UpdateData] 
        WHERE PeriodId = '1' 
        ) UD ON UD.Cid = NC.Id 
     LEFT JOIN (SELECT * 
        FROM [NEWSEMAKPI].[dbo].[TargetData] 
       ) TD ON UD.Cid = TD.CId 
WHERE NC.Grade = 'A' 
     AND IsActived = '0' 
GROUP BY Category , 
     KPI , 
     TDTargetValue 
ORDER BY 1 
+0

谢谢。它工作...不是NC.Month - > UD.Month – user3538475

+0

不客气 –