Reputation: 610
What would be the query to find List of material that are assigned to more than one maincode.
Here is the sample data
CREATE TABLE #MaterialMainCodetemp (
MaterialCode VARCHAR(100),
Maincode varchar(100)
);
Insert into #MaterialMainCodetemp Values('Material1','Main1')
Insert into #MaterialMainCodetemp Values('Material5','Main1')
Insert into #MaterialMainCodetemp Values('Material2','Main1')
Insert into #MaterialMainCodetemp Values('Material3','Main1')
Insert into #MaterialMainCodetemp Values('Material4','Main1')
Insert into #MaterialMainCodetemp Values('Material1','Main2')
Insert into #MaterialMainCodetemp Values('Material6','Main2')
Insert into #MaterialMainCodetemp Values('Material7','Main2')
Insert into #MaterialMainCodetemp Values('Material8','Main3')
Insert into #MaterialMainCodetemp Values('Material4','Main4')
Select M.MaterialCode,Count(*) from #MaterialMainCodetemp M
GROUP By M.MaterialCode
Having Count(*) > 1
Above query Returns this, but i should only get back Material1, since only that material is assign two different MainCode
MaterialCode (No column name)
Material4 2
Material1 2
What Query would look like that will return Material1 only ?
Upvotes: 0
Views: 41
Reputation: 5753
I think your sample data is off. Material4 is in fact assigned two different main codes. Change your last insert statement to:
Insert into #MaterialMainCodetemp Values('Material4','Main1')
or drop it entirely.
However, your query would still give you that result even if you changed it. So use count(distinct maincode)
:
Select M.MaterialCode,Count(distinct maincode) from #MaterialMainCodetemp M
GROUP By M.MaterialCode
Having Count(distinct maincode) > 1
Upvotes: 1