[SQL] MSSQL - GROUP_CONCAT
SQLMSSQL - GROUP_CONCAT
다음은 샘플 데이터는 다음과 같습니다
IdProduit Localisation Qte_EnMain
4266864286880063006 E2-R40-B-T 13.00000
4266864286880063006 E2-R45-B-T 81.00000
4266864286880063007 E2-R45-C-T 17.00000
4266864286880063008 E2-R37-B-T 8.00000
그리고 이것은 내가하고 싶은 것입니다
IdProduit AllLocalisation
4266864286880063006 E2-R40-B-T (13), E2-R45-B-T (81)
4266864286880063007 E2-R45-C-T (17)
4266864286880063008 E2-R37-B-T (8)
나는 포럼 GROUP_CONCAT의 모든 예제를 본 나는 몇 가지 테스트를 시도했다.
정말 다도를 이해하지 못하는 ().
여기에 내가하고 싶은 것입니다 :
SELECT
a.IdProduit,
GROUP_CONCAT(
CONCAT(b.Localisation, ' (', CAST(ROUND(a.Qte_EnMain, 0) AS NUMERIC(36, 0)), ')')
) AS AllLocation
FROM
ogasys.INV_InventENTLoc a
LEFT JOIN ogasys.INV_LocName b ON a.IdLoc = b.IdLoc
GROUP BY a.IdProduit, b.Localisation, a.Qte_EnMain
GROUP_CONCAT은 MSSQL 작업을하지 않기 때문에 지금이 내가이 포럼의 모든 예제를 생성 한 쿼리입니다.
SELECT
DISTINCT
a1.IdProduit,
STUFF((SELECT DISTINCT '' + b2.Localisation
FROM
ogasys.INV_InventENTLoc a2
LEFT JOIN ogasys.INV_LocName b2 ON a2.IdLoc = b2.IdLoc
WHERE a2.IdLoc = a1.IdLoc
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 0, '') data
FROM
ogasys.INV_InventENTLoc a1
LEFT JOIN ogasys.INV_LocName b1 ON a1.IdLoc = b1.IdLoc
ORDER BY a1.IdProduit
쿼리는 내가이 쿼리 작업을하는 방법을 이해하지 않는 행에 의해 하나의 현지화를 반환합니다.
편집하다:
여기 내 상황에 대한 솔루션입니다 :
SELECT
a.IdProduit,
STUFF(
(SELECT ', ' + b2.Localisation + ' (' + CAST(CAST(ROUND(a2.Qte_EnMain, 0) AS NUMERIC(36, 0)) AS VARCHAR(32)) + ')'
FROM ogasys.INV_InventENTLoc a2
LEFT JOIN ogasys.INV_LocName b2 ON a2.IdLoc = b2.IdLoc
WHERE a.IdProduit = a2.IdProduit
FOR XML PATH (''))
, 1, 1, '') AS AllLocalisation
FROM
ogasys.INV_InventENTLoc a
LEFT JOIN ogasys.INV_LocName b ON a.IdLoc = b.IdLoc
GROUP BY a.IdProduit
해결법
-
==============================
1.다도를 사용하여
다도를 사용하여
declare @table table (IdProduit varchar(100), Localisation varchar(50), Qte_EnMain float) insert into @table values ('4266864286880063006','E2-R40-B-T', 13.00000), ('4266864286880063006','E2-R45-B-T', 81.00000), ('4266864286880063007','E2-R45-C-T', 17.00000), ('4266864286880063008','E2-R37-B-T', 8.00000) select IdProduit, STUFF ( (SELECT ',' + localisation + concat(' (',cast(qte_enMain as varchar(4)),') ') FROM @table t2 where t2.IdProduit = t1.IdProduit FOR XML PATH('')), 1, 1, '' ) from @table t1 group by IdProduit
from https://stackoverflow.com/questions/49784024/mssql-group-concat by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 서로 다른 값을 가진 테이블을 조인을 사용 값을 얻으려면? (0) | 2020.06.19 |
---|---|
[SQL] 타임 스탬프로 유닉스 시대를 변환하는 방법 (0) | 2020.06.19 |
[SQL] SQL 쿼리는 예상 결과를 표시되지 (0) | 2020.06.19 |
[SQL] ON UPDATE CASCADE로 점점 오류를 유지 SQL은 (0) | 2020.06.19 |
[SQL] 어떻게 SQL이 잘못 될 수 있는가? 나는 무엇을보고 있지 않다? (0) | 2020.06.19 |