it-source

SQL 서버에서 group_concat을 사용하여 쿼리를 만드는 방법

criticalcode 2023. 4. 11. 22:07
반응형

SQL 서버에서 group_concat을 사용하여 쿼리를 만드는 방법

sql 서버에서는 사용할 수 없는 것을 알고 있습니다.Group_concat하지만 여기 내가 해야 할 문제가 하나 있다.Group_Concat질문입니다.구글에서 어떤 논리를 찾았지만 수정할 수 없습니다.SQL 쿼리는

select  m.maskid,m.maskname,m.schoolid,s.schoolname,
md.maskdetail
from tblmask m join school s on s.id = m.schoolid 
join maskdetails md on m.maskid = md.maskid
order by m.maskname ;

그것은 나에게 다음과 같은 결과를 준다.

여기에 이미지 설명 입력

첫 번째 3행 maskid, maskname, schoolid, schoolname은 같지만 maskdetail은 다르므로 maskid에 따라 마지막 열에 모든 maskdetail을 포함할 수 있는 행으로 지정합니다.

출력은 다음과 같이 해 주세요.

여기에 이미지 설명 입력

기타 등등.그러니 그것에 대해 질문하는 동안 저를 도와주세요.

잘 부탁드립니다.

쿼리:

SELECT
      m.maskid
    , m.maskname
    , m.schoolid
    , s.schoolname
    , maskdetail = STUFF((
          SELECT ',' + md.maskdetail
          FROM dbo.maskdetails md
          WHERE m.maskid = md.maskid
          FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM dbo.tblmask m
JOIN dbo.school s ON s.ID = m.schoolid
ORDER BY m.maskname

추가 정보:

SQL Server 월드에서의 문자열 집약

Select
      A.maskid
    , A.maskname
    , A.schoolid
    , B.schoolname
    , STUFF((
          SELECT ',' + T.maskdetail
          FROM dbo.maskdetails T
          WHERE A.maskid = T.maskid
          FOR XML PATH('')), 1, 1, '') as maskdetail 
FROM dbo.tblmask A
JOIN dbo.school B ON B.ID = A.schoolid
Group by  A.maskid
    , A.maskname
    , A.schoolid
    , B.schoolname

이것은, 다음의 방법으로도 실시할 수 있습니다.Scalar-Valued FunctionMSSQL 2008
다음과 같이 기능을 선언하십시오.

CREATE FUNCTION [dbo].[FunctionName]
(@MaskId INT)
RETURNS Varchar(500) 
AS
BEGIN

    DECLARE @SchoolName varchar(500)                        

    SELECT @SchoolName =ISNULL(@SchoolName ,'')+ MD.maskdetail +', ' 
    FROM maskdetails MD WITH (NOLOCK)       
    AND MD.MaskId=@MaskId

    RETURN @SchoolName

END

그리고 당신의 마지막 질문은

SELECT m.maskid,m.maskname,m.schoolid,s.schoolname,
(SELECT [dbo].[FunctionName](m.maskid)) 'maskdetail'
FROM tblmask m JOIN school s on s.id = m.schoolid 
ORDER BY m.maskname ;

주의: 전체 테이블 구조를 모르기 때문에 기능을 변경해야 할 수 있습니다.

다음 쿼리를 실행해 주세요.이 경우 STUP 및 GROUP BY는 필요 없습니다.

Select
      A.maskid
    , A.maskname
    , A.schoolid
    , B.schoolname
    , CAST((
          SELECT  T.maskdetail+','
          FROM dbo.maskdetails T
          WHERE A.maskid = T.maskid
          FOR XML PATH(''))as varchar(max)) as maskdetail 
FROM dbo.tblmask A
JOIN dbo.school B ON B.ID = A.schoolid

언급URL : https://stackoverflow.com/questions/17591490/how-to-make-a-query-with-group-concat-in-sql-server

반응형