복붙노트

[SQL] 쉼표로 구분 된 목록 건물?

SQL

쉼표로 구분 된 목록 건물?

내가 쉼표를 구축하는 SQL을 사용하기 위해 애 쓰고 있어요 CAT_ID 년대의 목록을 분리

코드는 다음과 같습니다

declare     @output varchar(max)
set         @output = null;
select @output = COALESCE(@output + ', ', '') + convert(varchar(max),cat_id)

편집 : STILL, null로 ''같은 변경되었습니다. 하지만 점점 출력 메신저과 같이이다 :

, 66 , 23

주요 쉼표가 안된다. 내가 무엇을 놓친?

해결법

  1. ==============================

    1.당신은 2005 SQL에 있습니까? 최근 나이 나타났다 롭 팔리에 소품 :

    당신은 2005 SQL에 있습니까? 최근 나이 나타났다 롭 팔리에 소품 :

    SELECT stuff((
        SELECT ', ' + cast(cat_id as varchar(max))
        FROM categories
        FOR XML PATH('')
        ), 1, 2, '');
    

    (XML로 ( '')의 경우)와 내부 쿼리 ","선두로, 카테고리 ID의 쉼표로 구분을 선택한다. 외부 쿼리는 최고의 쉼표와 공백을 제거하는 물건 함수를 사용합니다.

    메모리에서 그래서 나는이를 테스트하기 편리하여 SQL 인스턴스가 없습니다. 당신은 정확하게 당신이 원하는 방법 일을 얻을 수있는 물건 매개 변수 등을 함께 플레이 할 수 있습니다.

  2. ==============================

    2.COALESCE는 인수 중 첫 번째 Null이 아닌 식을 돌려줍니다

    COALESCE는 인수 중 첫 번째 Null이 아닌 식을 돌려줍니다

    항상 반환 그래서, (당신이 널 (null) AND ON으로 설정 CONCAT_NULL_YIELDS_NULL로 @output initialize가 아닌 경우) 첫 번째 인수 @output +는 ','널 결코 없다.

  3. ==============================

    3.그리고 때로는...

    그리고 때로는...

    당신은 당신의 자신의 질문에 대답해야

    declare     @output varchar(max)
    select      @output = case when (@output is null) then '' else ', ' END + convert(varchar(max),cat_id)
    
  4. ==============================

    4.다만이 쿼리의 실행 전에 값을 @output 확인, 나는 그것이 아니라 생각 NULL로하지만 (빈 문자열) ''같음

    다만이 쿼리의 실행 전에 값을 @output 확인, 나는 그것이 아니라 생각 NULL로하지만 (빈 문자열) ''같음

    편집 :합니다 (@auth 질문을 편집 한 후)

    지금은 '확실히 그것'의 해요,

    당신은 NULL로 초기화해야

    CONCAT_NULL_YIELDS_NULL 독립적으로 그것을 할 것은, 언제 이전 CASE를 사용합니다 :

    select @output = NULL
    select @output = CASE WHEN @output IS NULL THEN '' ELSE @output+', ' END + value
    
  5. ==============================

    5.

    declare     @output varchar(max)
    
    select      @output = coalesce
                          ( 
                              @output + ', ' + convert(varchar(max),cat_id), 
                              convert(varchar(max),cat_id)
                          )
    from        yourTableHere
    
    print       @output
    
  6. ==============================

    6.당신은 빈 문자열로 @output 초기화나요? 그것은 NULL 문자열 인 경우 COALESCE에만 작동합니다.

    당신은 빈 문자열로 @output 초기화나요? 그것은 NULL 문자열 인 경우 COALESCE에만 작동합니다.

  7. ==============================

    7.당신이 잘못하고있는 것은 @output 처음부터 널하지만 빈 문자열되지 않는 것입니다. 루프 전에 null로 설정 @output (그것이 선언 이후 사용되어 있지 않은 경우 또는 단지에 빈 문자열을 지정하지 않음).

    당신이 잘못하고있는 것은 @output 처음부터 널하지만 빈 문자열되지 않는 것입니다. 루프 전에 null로 설정 @output (그것이 선언 이후 사용되어 있지 않은 경우 또는 단지에 빈 문자열을 지정하지 않음).

  8. ==============================

    8.확실하지 이것이 당신이 찾고있는 정확하게 적용,하지만 난 질문을 발견 동시에이 권리를 발견합니다. 나는 매트 해밀턴은 위에서 언급 한 대한의 XML의 PATH와 두 번째 솔루션을 사용합니다. 그것은 나를 위해 큰 일입니다.

    확실하지 이것이 당신이 찾고있는 정확하게 적용,하지만 난 질문을 발견 동시에이 권리를 발견합니다. 나는 매트 해밀턴은 위에서 언급 한 대한의 XML의 PATH와 두 번째 솔루션을 사용합니다. 그것은 나를 위해 큰 일입니다.

    행을 연결 - 칼 P. 앤더슨, 2009년 10월 14일으로

    http://www.sqlservercentral.com/articles/T-SQL/67973/

  9. ==============================

    9.

    /osp/install/idp/bin/sqlminus "select ri || ',' ||name|| ',' || numports || ',' || ascii(OVRONSET) from sdfctigw.ivrgrp where GRP_BEP is not null;" | sort -h
    1,COMO INTERNAL 2,700,90
    7,LOADIVR,10,80
    10,SPEECH_IVR_PROD,600,95
    
  10. from https://stackoverflow.com/questions/1564980/building-a-comma-separated-list by cc-by-sa and MIT license