복붙노트

[SQL] 어떻게 열 (T-SQL)에서 여러 값을 반환?

SQL

어떻게 열 (T-SQL)에서 여러 값을 반환?

나는 사용자 당 여러 개의 별칭을 가진 테이블 UserAliases (사용자 아이디, 별칭)가 있습니다. 나는 트릭은 하나의 열에서 그들 모두를 반환하는 것입니다, 그것을 쿼리하고 해당 사용자의 모든 별칭을 반환해야합니다.

예:

UserId/Alias  
1/MrX  
1/MrY  
1/MrA  
2/Abc  
2/Xyz

나는 다음과 같은 형식의 쿼리 결과를 원하는 :

UserId/Alias  
1/ MrX, MrY, MrA  
2/ Abc, Xyz

감사합니다.

나는 SQL 서버 2005을 사용하고 있습니다.

추신. 실제 T-SQL 쿼리 주시면 감사하겠습니다 :)

해결법

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

    1.당신은 유착과 기능을 사용할 수 있습니다.

    당신은 유착과 기능을 사용할 수 있습니다.

    CREATE FUNCTION [dbo].[GetAliasesById]
    (
        @userID int
    )
    RETURNS varchar(max)
    AS
    BEGIN
        declare @output varchar(max)
        select @output = COALESCE(@output + ', ', '') + alias
        from UserAliases
        where userid = @userID
    
        return @output
    END
    
    GO
    
    SELECT UserID, dbo.GetAliasesByID(UserID)
    FROM UserAliases
    GROUP BY UserID
    
    GO
    
  2. ==============================

    2.음 ... 나는 대답이 이미 받아 들여진 것을 볼 수 ...하지만 난 당신이 어쨌든 다른 솔루션을 참조해야한다고 생각 :

    음 ... 나는 대답이 이미 받아 들여진 것을 볼 수 ...하지만 난 당신이 어쨌든 다른 솔루션을 참조해야한다고 생각 :

    /* EXAMPLE */
    DECLARE @UserAliases TABLE(UserId INT , Alias VARCHAR(10))
    INSERT INTO @UserAliases (UserId,Alias) SELECT 1,'MrX'
         UNION ALL SELECT 1,'MrY' UNION ALL SELECT 1,'MrA'
         UNION ALL SELECT 2,'Abc' UNION ALL SELECT 2,'Xyz'
    
    /* QUERY */
    ;WITH tmp AS ( SELECT DISTINCT UserId FROM @UserAliases )
    SELECT 
        LEFT(tmp.UserId, 10) +
        '/ ' +
        STUFF(
                (   SELECT ', '+Alias 
                    FROM @UserAliases 
                    WHERE UserId = tmp.UserId 
                    FOR XML PATH('') 
                ) 
                , 1, 2, ''
            ) AS [UserId/Alias]
    FROM tmp
    
    /* -- OUTPUT
      UserId/Alias
      1/ MrX, MrY, MrA
      2/ Abc, Xyz    
    */
    
  3. ==============================

    3.이미 StackOverflow의에이 스레드를 살펴 보라는 편리하게 당신에게 T-SQL 예제를 제공합니다.

    이미 StackOverflow의에이 스레드를 살펴 보라는 편리하게 당신에게 T-SQL 예제를 제공합니다.

  4. ==============================

    4.이것은 당신이 UDF를 필요로하지 않고 무엇을해야하는 가장 빠르고 간단한 방법 중 하나입니다 : http://weblogs.sqlteam.com/mladenp/archive/2007/06/01/60220.aspx

    이것은 당신이 UDF를 필요로하지 않고 무엇을해야하는 가장 빠르고 간단한 방법 중 하나입니다 : http://weblogs.sqlteam.com/mladenp/archive/2007/06/01/60220.aspx

    이 빨리 정말 큰 데이터 세트에있는 숫자 테이블을 사용 하나 개 다른 방법이있다하지만 난 당신이 필요합니다 생각하지 않습니다.

  5. ==============================

    5.COALESCE와 병합 : 내 상사가 이런 식으로 다시 2003에 대한 기사를 썼다

    COALESCE와 병합 : 내 상사가 이런 식으로 다시 2003에 대한 기사를 썼다

  6. ==============================

    6.

    DECLARE @Str varchar(500)
    
    SELECT @Str=COALESCE(@Str,'') + CAST(ID as varchar(10)) + ','
    FROM dbo.fcUser
    
    SELECT @Str
    
  7. ==============================

    7.당신은 임시 테이블의 필드에 커서 APPEND와 행을 하나 루프, 또는 당신은 필드을 연결하기 위해 병합 기능을 사용할 수 있습니다.

    당신은 임시 테이블의 필드에 커서 APPEND와 행을 하나 루프, 또는 당신은 필드을 연결하기 위해 병합 기능을 사용할 수 있습니다.

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

    8.죄송합니다, 질문의 잘못을 처음 읽었다. 당신이 뭔가를 할 수 있습니다 :

    죄송합니다, 질문의 잘못을 처음 읽었다. 당신이 뭔가를 할 수 있습니다 :

    declare @result varchar(max)
    
    --must "initialize" result for this to work
    select @result = ''
    
    select @result = @result + alias
    FROM aliases
    WHERE username='Bob'
    
  9. ==============================

    9.당신이 찾고있는 무엇을 같은 GROUP_CONCAT () 소리.

    당신이 찾고있는 무엇을 같은 GROUP_CONCAT () 소리.

    http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

    당신은 MSSQL에있어 이후, 난 그냥 "GROUP_CONCAT 경우 MSSQL을"인터넷 검색 및 재 작성 GROUP_CONCAT 기능에 히트 한 무리를 발견했다. 여기 내가 찾은 안타 중 하나입니다 :

    http://www.stevenmapes.com/index.php?/archives/23-Recreating-MySQL-GROUP_CONCAT-In-MSSQL-Cross-Tab-Query.html

  10. from https://stackoverflow.com/questions/122942/how-to-return-multiple-values-in-one-column-t-sql by cc-by-sa and MIT license