반응형
SQLSERVER에 AGG 나열
SQL Server에서 'STRING' 필드를 집계하려고 합니다.저는 오라클과 같은 LISTAGG 기능을 찾고 싶습니다.
당신은 같은 기능이나 다른 방법을 할 줄 압니까?
예를들면,
Field A | Field B
1 | A
1 | B
2 | A
그리고 저는 이 질문의 결과가
1 | AB
2 | A
MySQL
SELECT FieldA
, GROUP_CONCAT(FieldB ORDER BY FieldB SEPARATOR ',') AS FieldBs
FROM TableName
GROUP BY FieldA
ORDER BY FieldA;
오라클 및 DB2
SELECT FieldA
, LISTAGG(FieldB, ',') WITHIN GROUP (ORDER BY FieldB) AS FieldBs
FROM TableName
GROUP BY FieldA
ORDER BY FieldA;
PostgreSQl
SELECT FieldA
, STRING_AGG(FieldB, ',' ORDER BY FieldB) AS FieldBs
FROM TableName
GROUP BY FieldA
ORDER BY FieldA;
SQL 서버
SQL Server » 2017 및 Azure SQL
SELECT FieldA
, STRING_AGG(FieldB, ',') WITHIN GROUP (ORDER BY FieldB) AS FieldBs
FROM TableName
GROUP BY FieldA
ORDER BY FieldA;
SQL Server ≤ 2016(DRY 원칙을 장려하기 위해 CTE 포함)
WITH CTE_TableName AS (
SELECT FieldA, FieldB
FROM TableName)
SELECT t0.FieldA
, STUFF((
SELECT ',' + t1.FieldB
FROM CTE_TableName t1
WHERE t1.FieldA = t0.FieldA
ORDER BY t1.FieldB
FOR XML PATH('')), 1, LEN(','), '') AS FieldBs
FROM CTE_TableName t0
GROUP BY t0.FieldA
ORDER BY FieldA;
SQLite
주문에는 CTE 또는 하위 쿼리가 필요합니다.
WITH CTE_TableName AS (
SELECT FieldA, FieldB
FROM TableName
ORDER BY FieldA, FieldB)
SELECT FieldA
, GROUP_CONCAT(FieldB, ',') AS FieldBs
FROM CTE_TableName
GROUP BY FieldA
ORDER BY FieldA;
주문하지 않음
SELECT FieldA
, GROUP_CONCAT(FieldB, ',') AS FieldBs
FROM TableName
GROUP BY FieldA
ORDER BY FieldA;
SQL Server 2017부터 시작하여STRING_AGG
논리를 상당히 단순화하는 기능을 사용할 수 있습니다.
select FieldA, string_agg(FieldB, '') as data
from yourtable
group by FieldA
SQL Server에서 사용할 수 있습니다.FOR XML PATH
결과를 얻기 위해:
select distinct t1.FieldA,
STUFF((SELECT distinct '' + t2.FieldB
from yourtable t2
where t1.FieldA = t2.FieldA
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,0,'') data
from yourtable t1;
SQL Server 2017에 STRING_AGG가 추가되었습니다.
SELECT t.name,STRING_AGG (c.name, ',') AS csv
FROM sys.tables t
JOIN sys.columns c on t.object_id = c.object_id
GROUP BY t.name
ORDER BY 1
또한 STRING_SPLIT은 반대의 경우에도 유용하며 SQL Server 2016에서 사용할 수 있습니다.
이 기능은 데이터 분석 및 데이터 프로파일링 목적에 유용할 수도 있습니다.(즉, 기준으로 그룹화되지 않음).
SQL Server 2017 이전 버전STRING_AGG
함수 존재...
(즉, 한 행만 반환)
SELECT DISTINCT
SUBSTRING(
STUFF((
SELECT DISTINCT ',' + [FieldB]
FROM tablename
ORDER BY 1
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
, 1, 0, '')
, 2, 9999)
FROM tablename
쉼표로 구분된 값(예: "A,B")을 반환합니다.
언급URL : https://stackoverflow.com/questions/15477743/listagg-in-sqlserver
반응형
'source' 카테고리의 다른 글
숫자만 입력할 수 있는 텍스트 상자를 만들려면 어떻게 해야 합니까? (0) | 2023.06.01 |
---|---|
엔티티 프레임워크와 LINQ 간 SQL 비교 (0) | 2023.06.01 |
안드로이드에서 글로벌 변수를 선언하는 방법은 무엇입니까? (0) | 2023.06.01 |
Local Broadcast Manager 사용 방법 (0) | 2023.06.01 |
C# 또는 VB.NET을 사용하여 현재 로컬 호스트 이름을 가져오려면 어떻게 해야 합니까? (0) | 2023.06.01 |