|
|
|
Grasshopper
      
Group: General Forum Members
Last Login: Thursday, April 18, 2013 2:57 AM
Points: 15,
Visits: 62
|
|
Hi i am trying to use select distinct with order by case but getting an error like
[color=#990000]"ORDER BY items must appear in the select list if SELECT DISTINCT is specified."[/color]
select DISTINCT VacancyInternalID , VacancyTitle ,NULL ParentInternalID , NULL GeoLocation from Vacancy.TB_Vacancy va inner join Config.TB_Contract co on va.VacancyContractID = co.ContractInternalID where co.ContractExternalID = '492A94D0-7D71-46E5-A8F6-E3A973394647' and co.ContractStatusID = 1 and VacancyStatusID = 1 and VacancyTitle like '%%' order by case when @SortFieldIndexConfig=1 then VacancyInternalID end DESC, case when @SortFieldIndexConfig=2 then VacancyTitle end DESC,case when @SortFieldIndexConfig NOT IN(1,2) then VacancyInternalID end DESC
I want a solution without subquery for this problem.can any one help on this topic
|
|
|
|
|
SSCarpal Tunnel
       
Group: General Forum Members
Last Login: Today @ 3:08 AM
Points: 4,236,
Visits: 9,473
|
|
Just add the CASE construct to your SELECT. The CASE construct can be made more compact too:
select distinct VacancyInternalID ,VacancyTitle ,null ParentInternalID ,null GeoLocation , order = ( case @SortFieldIndexConfig when 2 then VacancyTitle else VacancyInternalID end ) from Vacancy.TB_Vacancy va inner join Config.TB_Contract co on va.VacancyContractID = co.ContractInternalID where co.ContractExternalID = '492A94D0-7D71-46E5-A8F6-E3A973394647' and co.ContractStatusID = 1 and VacancyStatusID = 1 and VacancyTitle like '%%' order by ( case @SortFieldIndexConfig when 2 then VacancyTitle else VacancyInternalID end ) desc
____________________________________________________________________________________________
Help us to help you. For better, quicker and more focused answers to your questions, consider following the advice in this link:
http://www.sqlservercentral.com/articles/Best+Practices/61537/
If you are asking for help and your post does not contain a question, you should expect responses which do not contain any answers. Put a question mark in there somewhere - it's not rocket science.
|
|
|
|
|
Grasshopper
      
Group: General Forum Members
Last Login: Thursday, April 18, 2013 2:57 AM
Points: 15,
Visits: 62
|
|
Hi, Thanks 4 ur solution but I am getting error in order clause
Incorrect syntax near the keyword 'order'.
Incorrect syntax near the keyword 'ELSE'.
Incorrect syntax near the keyword 'ELSE'.
|
|
|
|
|
SSCrazy
      
Group: General Forum Members
Last Login: Yesterday @ 6:07 PM
Points: 2,340,
Visits: 3,167
|
|
|
|
|
|
SSCarpal Tunnel
       
Group: General Forum Members
Last Login: Today @ 3:08 AM
Points: 4,236,
Visits: 9,473
|
|
dwain.c (10/31/2012)
28.kanikasoni (10/31/2012) Hi, Thanks 4 ur solution but I am getting error in order clause
Incorrect syntax near the keyword 'order'.
Incorrect syntax near the keyword 'ELSE'.
Incorrect syntax near the keyword 'ELSE'.
Try removing the parentheses around the CASE statement in the ORDER BY clause.
Actually, I think the problem might be that I used the reserved word 'Order' as column alias. Try this:
select distinct VacancyInternalID ,VacancyTitle ,null ParentInternalID ,null GeoLocation , OrderBy = ( case @SortFieldIndexConfig when 2 then VacancyTitle else VacancyInternalID end ) from Vacancy.TB_Vacancy va inner join Config.TB_Contract co on va.VacancyContractID = co.ContractInternalID where co.ContractExternalID = '492A94D0-7D71-46E5-A8F6-E3A973394647' and co.ContractStatusID = 1 and VacancyStatusID = 1 and VacancyTitle like '%%' order by ( case @SortFieldIndexConfig when 2 then VacancyTitle else VacancyInternalID end ) desc
____________________________________________________________________________________________
Help us to help you. For better, quicker and more focused answers to your questions, consider following the advice in this link:
http://www.sqlservercentral.com/articles/Best+Practices/61537/
If you are asking for help and your post does not contain a question, you should expect responses which do not contain any answers. Put a question mark in there somewhere - it's not rocket science.
|
|
|
|
|
Grasshopper
      
Group: General Forum Members
Last Login: Thursday, April 18, 2013 2:57 AM
Points: 15,
Visits: 62
|
|
Thank you for your excellent solution now its working fine
|
|
|
|
|
Grasshopper
      
Group: General Forum Members
Last Login: Thursday, April 18, 2013 2:57 AM
Points: 15,
Visits: 62
|
|
But here I am getting one extra column which I don't want.
and also in other cases I need to use multiple case statement with order by because different datatype of columns create problem in single case statement with multiple whens.
Plz provide solution to this prob
|
|
|
|
|
SSC-Enthusiastic
      
Group: General Forum Members
Last Login: Thursday, May 16, 2013 7:38 AM
Points: 180,
Visits: 468
|
|
You could use Phil's suggested query as a subquery. This lets you add as many CASE statements with as many WHEN statements as you want and it lets you filter out those unwanted columns in the final query result. The following code should give you an idea of what I mean. Obviously the OrderBy2 part would not have the same syntax as OrderBy1.
SELECT sub.VacancyInternalID ,sub.VacancyTitle ,sub.ParentInternalID ,sub.GeoLocation FROM ( select distinct VacancyInternalID ,VacancyTitle ,null ParentInternalID ,null GeoLocation ,OrderBy1= ( case @SortFieldIndexConfig when 1 then VacancyInternalID when 2 then VacancyTitle else VacancyInternalID end ) ,OrderBy2= ( case @SortFieldIndexConfig when 1 then VacancyInternalID when 2 then VacancyTitle else VacancyInternalID end ) from Vacancy.TB_Vacancy va inner join Config.TB_Contract co on va.VacancyContractID = co.ContractInternalID where co.ContractExternalID = '492A94D0-7D71-46E5-A8F6-E3A973394647' and co.ContractStatusID = 1 and VacancyStatusID = 1 and VacancyTitle like '%%' ) sub ORDER BY sub.OrderBy1 DESC, sub.OrderBy2 DESC
|
|
|
|