a 테아불
==================
PK_ID NAME JUMSU
1 문길수 50
2 안청인 68
3 오만숙 87
4 최말자 100
5 김숙자 78
위 테이블을 조회시 특정한 이름이 맨처름 조회가 되도록 할수없나요?
예를 들면 최말자라는 이름이 맨처음에 조회가 되는겁니다
최말자
문길수
안창인
오만숙
김숙자
어제 이렇게 질문드려서 좋은 답변을 받아서 아래와 같이 한번 해봤습니다
alter FUNCTION [dbo].[fn_NameJoin]( @Name nvarchar(50))
RETURNS VARCHAR(1200)
AS
BEGIN
DECLARE @retVal NVARCHAR(1200)
SELECT @retVal = COALESCE( @retVal + ',' ,'') + Ltrim(Rtrim(Name)) FROM table_test
order by case when Name = @Name then 0 else PK_ID end
RETURN @retVal
End
[dbo].[fn_NameJoin] ('오만숙')
위처럼 했는데요
김숙자 뿐이 안나옵니다
orerr by 절을 없애야지만 최말자, 문길수...... 잘나옵니다
그런데 order.절에 직접 이름을 적어주면 잘나옵니다
order by case when Name = '오만숙' then 0 else PK_ID end
도대체 왜그럴까요?
==================
PK_ID NAME JUMSU
1 문길수 50
2 안청인 68
3 오만숙 87
4 최말자 100
5 김숙자 78
위 테이블을 조회시 특정한 이름이 맨처름 조회가 되도록 할수없나요?
예를 들면 최말자라는 이름이 맨처음에 조회가 되는겁니다
최말자
문길수
안창인
오만숙
김숙자
어제 이렇게 질문드려서 좋은 답변을 받아서 아래와 같이 한번 해봤습니다
alter FUNCTION [dbo].[fn_NameJoin]( @Name nvarchar(50))
RETURNS VARCHAR(1200)
AS
BEGIN
DECLARE @retVal NVARCHAR(1200)
SELECT @retVal = COALESCE( @retVal + ',' ,'') + Ltrim(Rtrim(Name)) FROM table_test
order by case when Name = @Name then 0 else PK_ID end
RETURN @retVal
End
[dbo].[fn_NameJoin] ('오만숙')
위처럼 했는데요
김숙자 뿐이 안나옵니다
orerr by 절을 없애야지만 최말자, 문길수...... 잘나옵니다
그런데 order.절에 직접 이름을 적어주면 잘나옵니다
order by case when Name = '오만숙' then 0 else PK_ID end
도대체 왜그럴까요?
이름을 직접 적어주면 되는데요 변수를 대입시키면 안됩니다
order by case when Name = @Name then 0 else PK_ID end
김숙자 뿐이 안나옵니다
맨마지막 데이타만 나옵니다
도대체 order by case when Name = '오만숙' then 0 else PK_ID end
무슨이유로 직접 적어주는거랑 변수로 비교하는거랑 뭐가 달라서 변수로 비교하면 COALESCE 기능조차도
안되는건가요?
order by case when Name = @Name then 0 else PK_ID end
김숙자 뿐이 안나옵니다
맨마지막 데이타만 나옵니다
도대체 order by case when Name = '오만숙' then 0 else PK_ID end
무슨이유로 직접 적어주는거랑 변수로 비교하는거랑 뭐가 달라서 변수로 비교하면 COALESCE 기능조차도
안되는건가요?
Comment 6
-
항해자™
2016.03.24 22:01
-
문상연
2016.03.25 09:12
알려주신대로 했는데 똑같이 데이타가 하나만 나옵니다 -
짱나부러
2016.03.25 10:21
DECLARE @retVal NVARCHAR(1200)SELECT @retVal = COALESCE( @retVal + ',' ,'') + Ltrim(Rtrim(Name)) FROM( select ROW_NUMBER() over(order by case when name = '오만숙' then 0 else pk_id end) as pk_id, namefrom tbl_test ) as aorder by pk_id -
문상연
2016.03.25 14:10
고맙습니다
-
짱나부러
2016.03.25 18:03
제 생각으론 되야 된다고 생각했지만 왜 안되는지 이유를 모르겠네요.....
위 쿼리는 안되고 아래 쿼리는 된다라.... 사실 이해가 잘안갑니다.... 초보라.......ㅠㅠ
-
항해자™
2016.03.26 18:52
데이터가 많다면 인덱스를 잘 탈수 있도록 해주는게 좋을 듯 합니다,,
declare
@vPkId int
,@oResult nvarchar(max)
select
@vPkId = cPkId
,@oResult = cName
from dbo.tSample
where cName = N'오만숙'select @oResult += ', '+ cName
from dbo.tSample
where cPkId != @vPkId
order by cPkId
select @oResult += ', '+ cName
from dbo.tSample
order by case cName when @pName then 0 else cPkId end