[SQL] 수 있습니까 쉼표로 구분 한 열에 여러 행? [복제]
SQL수 있습니까 쉼표로 구분 한 열에 여러 행? [복제]
나는 SQL Server 데이터베이스에이 같은 병합을 시도하고있다 :
[TicketID], [Person] T0001 Alice T0001 Bob T0002 Catherine T0002 Doug T0003 Elaine
이 속으로 :
[TicketID], [People] T0001 Alice, Bob T0002 Catherine, Doug T0003 Elaine
나는 SQL Server와 Oracle 모두에서이 작업을 수행해야합니다.
나는 여기에서 필요로 정확히 수행 MySQL을위한 함수 GROUP_CONCAT를 발견하지만, MySQL은 여기에 옵션이 아닙니다.
편집 : 테스트 벤치 :
DECLARE @Tickets TABLE (
[TicketID] char(5) NOT NULL,
[Person] nvarchar(15) NOT NULL
)
INSERT INTO @Tickets VALUES
('T0001', 'Alice'),
('T0001', 'Bob'),
('T0002', 'Catherine'),
('T0002', 'Doug'),
('T0003', 'Elaine')
SELECT * FROM @Tickets
해결법
-
==============================
1.여기에 2005 + SQL 서버에서 작동하는 솔루션입니다 :
여기에 2005 + SQL 서버에서 작동하는 솔루션입니다 :
SELECT t.TicketID, STUFF(ISNULL((SELECT ', ' + x.Person FROM @Tickets x WHERE x.TicketID = t.TicketID GROUP BY x.Person FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), ''), 1, 2, '') [No Preceeding Comma], ISNULL((SELECT ', ' + x.Person FROM @Tickets x WHERE x.TicketID = t.TicketID GROUP BY x.Person FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), '') [Preceeding Comma If Not Empty] FROM @Tickets t GROUP BY t.TicketID
참고:
-
==============================
2.그리고, 완성도에 대한 MySQL 버전 :
그리고, 완성도에 대한 MySQL 버전 :
select TicketId, GROUP_CONCAT(Person ORDER BY Person SEPARATOR ', ') People from table group by TicketId
-
==============================
3.
DECLARE @Tickets TABLE ( [TicketID] char(5) NOT NULL, [Person] nvarchar(15) NOT NULL ) INSERT INTO @Tickets VALUES ('T0001', 'Alice'), ('T0001', 'Bob'), ('T0002', 'Catherine'), ('T0002', 'Doug'), ('T0003', 'Elaine') SELECT * FROM @Tickets Select [TicketID], STUFF((SELECT ',' + Person FROM @Tickets WHERE ( TicketID=Result.TicketID) FOR XML PATH ('')),1,1,'') AS BATCHNOLIST From @Tickets AS Result GROUP BY TicketID
-
==============================
4.나는 오라클에서이 작업을 수행 할 수있는 방법을 발견했다,하지만, 난 여전히 SQL 서버에서 그것을 할 필요가있다.
나는 오라클에서이 작업을 수행 할 수있는 방법을 발견했다,하지만, 난 여전히 SQL 서버에서 그것을 할 필요가있다.
에서 http://technology.amis.nl/blog/6118/oracle-rdbms-11gr2-listagg-new-aggregation-operator-for-creating-comma-delimited-strings (감사 tanging) (ORACLE 11 이상)
select TicketId, listagg(Person, ', ') People from table group by TicketId
올린 사람 : http://halisway.blogspot.com/2006/08/oracle-groupconcat-updated-again.html
with data as ( select TicketId, Person, ROW_NUMBER() over (partition by TicketId order by Person) "rownum", COUNT(*) over (partition by TicketId) "count" from Table ) select TicketId, LTRIM(sys_connect_by_path(Person,','),',') People from data where "rownum" = "count" start with "rownum" = 1 connect by prior TicketId = TicketId and prior "rownum" = "rownum" - 1 order by TicketId
-
==============================
5.하나의 예
하나의 예
SELECT DISTINCT t.TicketID, STUFF((SELECT ', ', i.Person as [text()] FROM @Tickets i WHERE i.TicketID = t.TicketID FOR XML PATH ('')), 1, 2, '') as People FROM @Tickets t
......... 또는 시도 ..............
SELECT DISTINCT t.TicketID, STUFF((SELECT ', ' + i.Person /* notice this line is different */ FROM @Tickets i WHERE i.TicketID = t.TicketID FOR XML PATH ('')), 1, 2, '') as People FROM @Tickets t
/ * 내 테이블이 사용 및 신용 내 관리자에게 그 돌을 갈 때이 작품! * /
from https://stackoverflow.com/questions/2046037/can-i-comma-delimit-multiple-rows-into-one-column by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 여러 열에 의해 그룹을 사용하여 (0) | 2020.03.09 |
---|---|
[SQL] 분할 쉼표는 오라클의 열 값을 분리 (0) | 2020.03.09 |
[SQL] 어떻게 MySQL을 사용 두 날짜 사이 쿼리합니까? (0) | 2020.03.09 |
[SQL] 어떻게 (또는 내가 수 있습니다) 여러 열에서 DISTINCT 선택합니까? (0) | 2020.03.09 |
[SQL] 이를 이미 없으면 만 행을 삽입 (0) | 2020.03.09 |