Hi Christian Graus
Thanks to answer me, but i already used Group by class to get that
Following are the solutions.
Solution 1: Using Cursors
Solution 2: Using Group BY class
First solution give me correct answer.
Second solution give incorrect answer as you already suggest me to use group by class
Using Cursors:
Create table Merchants (MerchantID int)
Create Table MerchantCategory(CategoryID int, MerchantID int)
insert into Merchants values (45)
insert into Merchants values (46)
insert into Merchants values (47)
insert into MerchantCategory values (2,45)
insert into MerchantCategory values (3,45)
insert into MerchantCategory values (4,45)
insert into MerchantCategory values (3,46)
insert into MerchantCategory values (4,46)
insert into MerchantCategory values (2,47)
Select M.MerchantID, 0 as Total into #Temp1
from Merchants M WITH (NOLOCK)
DECLARE @MerchantID INT
DECLARE @getMerchantID CURSOR
SET @getMerchantID = CURSOR FOR
SELECT MerchantID
FROM #Temp1
OPEN @getMerchantID
FETCH NEXT
FROM @getMerchantID INTO @MerchantID
WHILE @@FETCH_STATUS = 0
BEGIN
Select Distinct
MC.MerchantID
Into #Temp2
FROM
MerchantCategory MC WITH (NOLOCK)
WHERE MC.CategoryID in (SELECT MC1.CategoryID FROM MerchantCategory MC1 WHERE MC1.MerchantID = @MerchantID)
AND MC.MerchantID <> @MerchantID
Declare @CountTotal int
set @CountTotal = (select COUNT(*) from #Temp2)
update #Temp1 SET Total = @CountTotal
where #Temp1.MerchantID= @MerchantID
Drop table #Temp2
FETCH NEXT
FROM @getMerchantID INTO @MerchantID
END
CLOSE @getMerchantID
DEALLOCATE @getMerchantID
select * from #Temp1 where Total > 0
drop table #Temp1
drop table Merchants
drop table MerchantCategory
Using Group BY class:
Create table Merchants (MerchantID int)
Create Table MerchantCategory(CategoryID int, MerchantID int)
insert into Merchants values (45)
insert into Merchants values (46)
insert into Merchants values (47)
insert into MerchantCategory values (2,45)
insert into MerchantCategory values (3,45)
insert into MerchantCategory values (4,45)
insert into MerchantCategory values (3,46)
insert into MerchantCategory values (4,46)
insert into MerchantCategory values (2,47)
Select M.MerchantID, 0 as Total into #Temp1
from Merchants M WITH (NOLOCK)
SELECT Count(MC.MerchantID) AS CountMerchantID,MC.CategoryID
INTO #Temp5
FROM MerchantCategory MC
WHERE MC.CategoryID in (SELECT MC1.CategoryID FROM MerchantCategory MC1)
GROUP BY MC.CategoryID
ORDER BY MC.CategoryID
SELECT Count(MC.MerchantID) AS CountSpecificMerchantID,MC.MerchantID AS SpecificMerchantID
INTO #Temp51
FROM MerchantCategory MC
WHERE MC.CategoryID in (SELECT MC1.CategoryID FROM MerchantCategory MC1)
GROUP BY MC.MerchantID
ORDER BY MC.MerchantID
SELECT MC.CategoryID,t5.CountMerchantID,MC.MerchantID
INTO #Temp6
FROM MerchantCategory MC
INNER JOIN #Temp5 t5
ON t5.CategoryID = MC.CategoryID
ORDER BY MC.MerchantID
SELECT SUM(t6.CountMerchantID) AS RelevantInclusiveMerchantsCount, t6.MerchantID AS t7MerchantID
INTO #Temp7
FROM #Temp6 t6
GROUP BY t6.MerchantID
ORDER BY t6.MerchantID
UPDATE #Temp1 SET Total = (SELECT (isNull(t7.RelevantInclusiveMerchantsCount,0)-(isnull(t51.CountSpecificMerchantID,0))) as RelevantMerchantsCount FROM #Temp7 t7 INNER JOIN #Temp51 t51 ON t7.t7MerchantID = t51.SpecificMerchantID WHERE t7.t7MerchantID = #Temp1.MerchantID AND t51.SpecificMerchantID = #Temp1.MerchantID)
SELECT t1.*,t7.RelevantInclusiveMerchantsCount,t51.CountSpecificMerchantID
FROM #Temp1 t1
LEFT OUTER JOIN #Temp7 t7
ON t1.MerchantID = t7.t7MerchantID
LEFT OUTER JOIN #Temp51 t51
ON t1.MerchantID = t51.SpecificMerchantID
drop table #Temp1
drop table #Temp5
drop table #Temp51
drop table #Temp6
drop table #Temp7
drop table Merchants
drop table MerchantCategory