代码之家  ›  专栏  ›  技术社区  ›  Irwin

获取列列表以显示在与它们相关的列旁边

  •  3
  • Irwin  · 技术社区  · 16 年前

    我有一个这样的桌子:

    [ReferredID], [Name]
    
    1, Irwin
    
    2, Marc
    
    1, Johnny
    
    5, Jackie
    
    2, Perry
    
    1, Reuben
    

    [ReferredID], [List]
    
    [1], [Irwin, Johnny, Reuben]
    
    [2], [Marc, Perry]
    
    [5], [Jackie]
    

    你能帮我找到正确的查询来生成这些结果吗?

    2 回复  |  直到 16 年前
        1
  •  3
  •   Quassnoi    16 年前
    WITH    mytable (ReferredID, Name) AS
            (
            SELECT  1, 'Irwin'
            UNION ALL
            SELECT  2, 'Marc'
            UNION ALL
            SELECT  1, 'Johnny'
            UNION ALL
            SELECT  5, 'Jackie'
            UNION ALL
            SELECT  2, 'Perry'
            UNION ALL
            SELECT  1, 'Reuben'
            )
    SELECT  ReferredID,
            (
            SELECT  CASE ROW_NUMBER() OVER (ORDER BY Name) WHEN 1 THEN '' ELSE ', ' END + Name AS [text()]
            FROM    mytable mi
            WHERE   mi.ReferredID = mo.ReferredID
            FOR XML PATH('')
            ) List
    FROM    (
            SELECT  DISTINCT ReferredID
            FROM    mytable
            ) mo
    
        2
  •  1
  •   SpoonMeiser    16 年前

    您可能可以使用特定风格的SQL来实现这一点,但我认为任何SQL标准都不支持它。

    如果您是从某个程序进行SQL查询,那么最好只执行简单的排序,然后在代码中对记录进行分组。

    在python中,类似于:

    results = dict()
    for r in rs:
        if r.ReferrerId not in results:
            results[r.ReferredId] = list()
        results[r.ReferredId].append(r.Name)
    
    推荐文章