【问题标题】:How to select 3 rows values in single column如何在单列中选择 3 行值
【发布时间】:2017-03-15 19:04:22
【问题描述】:

我在 SQL Server 中有一个表:

M_AllParty_HDR(ID, PartyName, AgentId, IsDeleted, IsActive)

我想在单行中选择任何特定 AgentID 的所有 PartyName 并且 PartyName 应该用逗号符号区分。我已经做了以下来解决这个问题

select PartyName+',' 
from M_AllParty_HDR 
where AgentID=1613 and IsDeleted=0 and IsActive=1

输出是

Rajesh mishra
Siddhi traders
Kamat tiwari

这是 3 行。 但我希望输出如下:-

Rajesh mishra,Siddhi traders,Kamat tiwari

这怎么可能?请帮助我这里的人。

【问题讨论】:

标签: sql-server


【解决方案1】:

对于 SQL-Server,这通常使用以下事实来完成,即没有元素名称的 XML 将是连接文本原样

select stuff(
(
select ',' + PartyName
from M_AllParty_HDR 
where AgentID=1613 and IsDeleted=0 and IsActive=1
for xml path('')
),1,1,'');

STUFF 将去掉前面的,

如果您的 PartyNames 中可能包含禁止字符(尤其是 <, > or &),您可以使用此:

select stuff(
((
select ',' + PartyName
from M_AllParty_HDR 
where AgentID=1613 and IsDeleted=0 and IsActive=1
for xml path(''),TYPE).value('.','nvarchar(max)')
),1,1,'');

(未经测试...)

【讨论】:

    【解决方案2】:

    你可以这样试试

    SELECT
        p.agentid,
        STUFF((SELECT
            ',' + PartyName
        FROM M_AllParty_Hdr
        WHERE agentid = p.agentid
        FOR xml PATH ('')), 1, 1, '') AS CommaSeperated
    FROM M_AllParty_Hdr p
    WHERE agentid = 1613 AND IsDeleted = 0 AND IsActive = 1
    GROUP BY p.agentid
    

    【讨论】:

      【解决方案3】:

      方法一:最简单的方法

      DECLARE @Names VARCHAR(8000) 
      SELECT @Names = COALESCE(@Names + ', ', '') + PartyName 
      FROM M_AllParty_HDR
      WHERE PartyName IS NOT NULL and AgentID=1613 and IsDeleted=0 and IsActive=1
      print @Names
      

      方法 2:为了获得更好的性能。

      SELECT STUFF((SELECT PartyName +','
          FROM M_AllParty_HDR WHERE PartyName IS NOT NULL and AgentID=1613 and IsDeleted=0 and IsActive=1
          FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
      

      【讨论】:

      • 这可能是 easy (个人观点),但它是 RBAR 并且仅可用于 multi-statement 程序方法......并且会很慢……
      • 是的,你说得对。我添加了其他方法以加快执行速度。
      • 现在它是现有答案的简单副本 :-) 没关系,快乐编码!
      猜你喜欢
      • 2019-11-24
      • 2013-05-23
      • 1970-01-01
      • 2020-02-18
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      相关资源
      最近更新 更多