2014-02-13 65 views
0

我使用以下查询进行组合以获得不同的结果。我组合了前两个选择查询,我需要将第三个选择查询与以前的两个查询结合起来。请提出你的想法。如何结合使用UNION的三个选择语句

我的查询是:

Select distinct Emp.EmpID,Emp.HolderName,jobprf.pkprofileid, 
        CASE WHEN jobprf.isSelfEvaluvated=1 THEN 'EVAL' ELSE 'NOTEVAL' END as Evalue, 
        CASE WHEN jobprf.isSelfEvaluvated=0 THEN 'Self Evaluvation Pending' ELSE 'Self Evaluvated' END as selfeval, 
        CASE WHEN jobprf.isMgEvaluvated=0 THEN 'Manger Evaluvation Pending' ELSE 'Manager Evaluvated' END as mangeval 
     from tblEmpRegistration Emp inner join tbljobprofile jobprf on Emp.EmpID=jobprf.EmpID where [email protected] or [email protected] and jobprf.RaterID<>@Mangrid 

     UNION All 

     Select distinct Emp.EmpID,Emp.HolderName,Emp.CompanyID,Emp.HolderName, 
      CASE WHEN Emp.EmpID IS NOT NULL THEN 'Self Evaluvation Pending' ELSE 'Self Evaluvated' END as selfeval, 
      CASE WHEN Emp.EmpID IS NOT NULL THEN 'Manger Evaluvation Pending' ELSE 'Manager Evaluvated' END as mangeval 
     from tblEmpRegistration Emp where Emp.EmpID NOT IN(SELECT EmpID FROM tbljobprofile) AND Emp.TITLE<>2 order by Emp.EmpID 

     UNION All 

     Select pkprofileid,isSelfEvaluvated,isMgEvaluvated,isMgEvaluvated,isMgEvaluvated,isMgEvaluvated from tbljobprofile where [email protected] 

而且它显示了一个错误

关键字 '联盟'

+0

它是SQL Server还是MySql? – Szymon

+1

'关键字'UNION'附近的语法不正确,这是MS SQL SERVER错误消息。 –

回答

2

您不能在UNION子句中使用ORDER BY子句。

+0

我使用ORDER BY子句,甚至还显示相同的错误 –

+0

感谢您的建议它将工作时,我从第二条语句中删除ORDER BY子句 –

+0

如果你想订购你的组合结果,你可以使用子查询。 –

1

你可以联盟,如果所有的选择查询返回附近的语法不正确相同的顺序列设置.. !!这里在你的情况下列的设置和顺序是不一样的,所以它会抛出一个错误。

+0

谢谢Deepak,他们结合列顺序,并返回错误数据类型不匹配 –

+0

,感谢您的建议它将起作用,当我从第二条语句中删除ORDER BY子句 –

+0

如果第一个选择查询返回3列** colA,colB,colC * *和您的第二个查询必须返回3列** colA,colB,colC **并且数据类型必须相同.. –