【问题标题】:How to generate sql output as piped [duplicate]如何将sql输出生成为管道[重复]
【发布时间】:2014-10-10 23:05:49
【问题描述】:

我正在使用 MS SQL Server。

我有一张这样的学生表:

StudentID,Teacher
123,Adams
124,Adams
125,Johnson
126,Johnson
127,Adams
128,Marks

我需要这样的输出:

Teacher,Students
Adams,123|124|127
Johnson,125|126
Marks,128

感谢您的帮助。谢谢。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:
    declare @table_var table(
        student_id INT,
        teacher varchar(50)
    )
    
    insert into @table_var
    select 123, 'Adams' union all
    select 124, 'Adams' union all
    select 125, 'Johnson' union all
    select 126, 'Johnson' union all
    select 127, 'Adams' union all
    select 128, 'Marks'
    
    select * from @table_var
    
    select
        teacher,
        students = stuff((select '|' + convert(varchar, t2.student_id)
                        from @table_var t2 
                        where t1.teacher = t2.teacher 
                        for xml path(''))
                    ,1,1,'')
    from @table_var t1
    group by t1.teacher
    

    【讨论】:

    • 非常感谢。我让它工作了。我不熟悉此查询的某些方面。你介意解释一下……比如什么是“东西”,对于xml?再次感谢。
    • path()里面的字符串是行级节点名,列名是节点名。在这种情况下,我们都有空字符串作为我们的节点名称,正如 for xml path('') 和 convert(varchar, t2.student_id) 所证明的那样。结果为 123124125126.. 然后我们添加 |在每个 student_id 之前,然后结果为 |123|124|125|126... 现在用 stuff() 去除前导分隔符 |。供参考:sqlservercentral.com/Forums/Topic1344161-391-1.aspx
    猜你喜欢
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 2021-11-27
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多