2012-07-31 5 views
0

내가하려고하는 것은 테이블의 두 필드를 연결하여 연결된 필드의 내림차순 길이로 정렬하고 내가 cut_vinylselect @ variable = case when ... end from ... order by len (@variable)

 
board_name | base_color | shade_color 
===================================== 
board0001 | clear  | NULL 
board0002 | clear  | blue 
board0003 | bronze  | bronze 
board0004 | bronze  | green 
board0005 | bronze  | blue 
board0006 | bronze  | NULL 

다음 표이 있다면, 그래서 ... 여기

내가 시도하고이를 달성하기 위해 사용하고는 SQL의 ...

declare @color nvarchar(255); 
declare @board_name nvarchar(255); 

select top(1) 
    @board_name = board_name, 
    @color = base_color + case when shade_color is null then '' else '/' + shade_color end 
from 
    cut_vinyl 
order by 
    len(@color) desc; 

select @board_name, @color; 

을 상단 결과를 얻을 수 그러면 나는 기대할 것이다. @board_name청동/청동, 아직 내가 대신 받고있는 것으로 보인다 수 board0003@color될 것은 @board_name = board0001@color = 같은 결과 명확

답변

1

variable에 주문 중입니다.

order by 
    len(@color) desc; 

당신이 가장 긴 색을 찾는 경우는, 사용하는 대신

order by 
    len(base_color) + len(shade_color) desc; 

.

+0

위의 표에서 볼 수 있듯이 예상 한 결과는 ** board0003 ** 만 반환해야합니다. 가장 긴'base_color' 만 필요하지는 않습니다. 가장 긴'base_color + '/'+ shade_color'가 필요합니다. –

+0

'shade_color' 길이로 주문하는 것이 맞습니다. 나는 대답을 편집했다. – Andomar

+0

그게 효과가 있습니다 ... 나는 결코 그것을 시도하는 것을 믿을 수 없습니다. –