Code to fetch GROUPED delimiter separated records in SQL SERVER

/*
To return GROUPED delimiter separated records in OUTER QUERY which are already delimiter separated in INNER QUERY (SQL SERVER 2012)
*/

/*
Table for Merchant Registration
*/
DECLARE @mer_registration TABLE
(
mer_id INT
)
INSERT INTO @mer_registration(mer_id)
VALUES
(1111111),
(1212121)

--SELECT * FROM @mer_registration









/*
Table for Merchant Sub Account 
*/
DECLARE @sub_account TABLE
(
mer_id INT,
sub_mer_id VARCHAR(50)
)
INSERT INTO @sub_account(mer_id, sub_mer_id)
VALUES
(1111111,'sub_121'),
(1111111,'sub_122'),
(1111111,'sub_123'),
(1111111,'sub_124'),
(1111111,'sub_125'),
(1111111,'sub_126'),
(1111111,'sub_127'),
(1212121,'sub_123'),
(1212121,'sub_124')

--SELECT * FROM @sub_account




/*
Table for merchant Report 
*/
DECLARE @account_report TABLE
(
mer_id INT,
sub_mer_id VARCHAR(50),
report_type VARCHAR(10)
)

INSERT INTO @account_report(mer_id, sub_mer_id, report_type)
VALUES
(1111111,'sub_121', 'Research'),
(1212121,'sub_123', 'Strategic')

--SELECT * FROM @account_report




/*
Here Need to show records for [mer_id] & [sub_mer_id] to whom, which [report_type] is NOT ASSIGNED in Table - [@account_report]
There should be single record for particular [mer_id] from Table - [@mer_registration] AND
[sub_mer_id] & [report_type] should be fetched delimiter separated, respectively.
*/

--------------- Code to fetch Records ------------------------ 
DECLARE @mer_id INT

;WITH CTE1(mer_id, report_type, sub_mer_id) AS
--  To fetch [mer_id] of multiple [report_type] with delimiter(,)separated [sub_mer_id]
(
SELECT DISTINCT B.mer_id,
C.report_type,
STUFF
(
(
SELECT ','+ csm.sub_mer_id
FROM @sub_account csm
WHERE csm.mer_id = B.mer_id
AND csm.sub_mer_id NOT IN
(
SELECT a.sub_mer_id
FROM @account_report a
WHERE a.mer_id = csm.mer_id
AND a.report_type = C.report_type
AND a.sub_mer_id IS NOT NULL
)
FOR XML PATH('')
),1,1,''
) AS sub_acc_id
FROM @account_report T2
OUTER APPLY
(
SELECT DISTINCT t1.report_type, t1.mer_id, T1.sub_mer_id
FROM @account_report T1
WHERE T1.report_type NOT IN
(
SELECT report_type
FROM @account_report a
WHERE a.mer_id = t1.mer_id
)
OR
T1.sub_mer_id IN
(
SELECT sub_mer_id
FROM @account_report a
WHERE a.mer_id = t1.mer_id
)
) C
RIGHT JOIN @mer_registration B ON T2.mer_id = B.mer_id
WHERE B.mer_id = ISNULL(@mer_id, B.mer_id)
),
CTE2(mer_id) AS -- To fetch DISTINCT [mer_id] 
(
SELECT DISTINCT mer_id
FROM CTE1
)

/*
To fetch DISTINCT [mer_id] having delimiter(#) separated [report_type]
with respective delimiter(#) separated [sub_mer_id]
*/
SELECT A.mer_id,
STUFF
(
(
SELECT '# '+ report_type
FROM CTE1 D
WHERE D.mer_id = A.mer_id
FOR XML PATH('')
),1,1,''
) AS report_type,
STUFF
(
(
SELECT '# '+ sub_mer_id
FROM CTE1 D
WHERE D.mer_id = A.mer_id
FOR XML PATH('')
),1,1,''
) AS sub_mer_id
FROM CTE2 A

------------------------------------------------

Result :



Comments

Popular posts from this blog

गोफ - गौरी देशपांडे

भिन्न - कविता महाजन

एकेक पान गळावया - गौरी देशपांडे