【问题标题】:SELECT records as comma separated string [duplicate]选择记录作为逗号分隔的字符串[重复]
【发布时间】:2014-08-08 23:16:17
【问题描述】:

所以我有以下表格:

Table 1

fname    mi    lname    empid

John     A     Smith    1202
Bob            Doe      9815


Table 2

unid    empid

1015     1202
1015     9815


Table 3

unid    Item

1015    ABC
1015    DEF

我的预期输出应该是(提供 unid=1015 时)

fname    mi    lname    item

John     A     Smith    ABC, DEF
Bob            Doe      

现在这将是理想的,但我非常乐意处理前端重复的 [Item] 值。

我目前的说法是:

select p.FNAME,p.MI,p.LNAME, ac.EQUIP from table1 t1, table2 t2, table3 t3  
where t1.EMPID = t2.EMPID and t2.UNID = t3.UNID and t2.unid = '1015' group by t1.FNAME, t1.MI, 
t1.LNAME,t3.EQUIP

对于我的一生,我无法弄清楚如何将 item 中的值(可以是 0 或更多,最大为 8)作为一个逗号分隔的字符串。我的问题是,由于站点/客户端的限制,我不能使用 SP,但这必须在一个 SQL 语句中完成。

这是在 SQL SERVER 2008 R2 上。

【问题讨论】:

  • 你必须使用STUFF

标签: sql sql-server tsql select sql-server-2008-r2


【解决方案1】:
Select distinct t.fname,t.mi,t.lname,
    STUFF((Select distinct i.item +  ',' 
        from Table3 i 
    where t.unid = tt.unid AND i.unid = '1015' 
    ORDER BY i.unid
    FOR XML PATH(''),TYPE).value('.', 'NVARCHAR(MAX)') 
                        , 1,  0, ' ') from Table1 t
                        INNER JOIN Table2 tt
                        ON tt.empid = t.empid
                     group by
                            t.FNAME, 
                            t.MI,
                            t.LNAME

【讨论】:

  • 这是什么黑魔法?感谢您向我介绍我以前从未见过的东西。 1 个快速问题,因为我无法按原样工作,在这种情况下,stuff 子句是否需要放在逗号后面?
  • 只需在 t.lname 后面加上逗号,并确保提供正确的名称标识符
  • 作为一个快速跟进,我到底如何摆脱尾随逗号?这是遗留软件,我能做的非常有限
猜你喜欢
  • 2023-04-09
  • 2012-10-30
  • 1970-01-01
  • 2018-07-29
  • 1970-01-01
  • 2013-03-06
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多