2016-11-02 2 views
2

У меня есть таблица в SQL Server:Как выбрать 3-х рядов значений в одном столбце

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

Я хочу, чтобы выбрать все PartyName какой-либо конкретной AgentID в одной строке и PartyName следует отличать от символа Comma. Я сделал следующее, чтобы решить эту проблему

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 

Как это возможно? Пожалуйста, помогите мне здесь.

+0

Возможный дубликат [Как я могу объединить несколько строк в разделенный запятыми список в SQL Server 2005?] (Http://stackoverflow.com/questions/180032/how-can-i-combine- multiple-rows-in-a-comma-delimited-list-in-sql-server-2005) –

+0

use select group_concat (PartyName, ",") – rocks

+0

другое решение http://stackoverflow.com/questions/6899/how- to-create-a-sql-server-function-to-join-multiple-rows-from-a-subquery-в –

ответ

1

С помощью SQL-сервер обычно это делается с помощью того факта, что XML без имен элементов будет слит текст только как

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

STUFF будет срезан ведущей ,.

Если вы, возможно, запрещенные символы (особенно <, > or &) в пределах ваших PartyNames, вы можете использовать это:

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,''); 

(непроверенные ...)

0

Вы можете попробовать, как это

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 
0

Способ 1: Самый простой способ сделать

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, '') 
+2

Это может быть * просто * (личная точка зрения), но это RBAR и только применим в * многозадачных процедурных подходах ... И это будет медленно ... – Shnugo

+0

да, вы правы. Я добавил другой метод для более быстрого выполнения. –

+0

Теперь это простая копия существующих ответов :-) Ничего и счастливого кодирования! – Shnugo