When I run the attached query, I get duplicates when there is one to
many relationship between tableA and tableB. The query, tested schema
and the result is attached. Sorry for the long post.
Here is tested Schema and Data inserts.
----------------------
create table TestTblA
(ShipDate datetime,
CPEID varchar(30),
phonenum char(14))
go
create table TestTblB
(CPEID varchar(30),
itemID varchar(30),
active char(1))
go
create table TestTblC
(itemID varchar(30),
descr varchar(50))
go
insert into TestTblA values (getdate(),'TWM UA','(408)-555-1211')
insert into TestTblA values (getdate(),'TWM UA','(408)-555-1212')
insert into TestTblA values (getdate(),'TWM UB','(408)-555-1211')
insert into TestTblA values (getdate(),'TWM UB','(408)-555-1212')
insert into TestTblA values (getdate(),'TWM UB','(408)-555-1213')
insert into TestTblA values (getdate(),'TWM UC','(408)-555-1211')
insert into TestTblA values (getdate(),'TWM UC','(408)-555-1212')
insert into TestTblA values (getdate(),'TWM UC','(408)-555-1213')
insert into TestTblA values (getdate(),'WWE XI','(408)-555-1211')
insert into TestTblA values (getdate(),'WWE XI','(408)-555-1212')
insert into TestTblA values (getdate(),'WWE XI','(408)-555-1211')
insert into TestTblB values ('TWMUA','1000-000043-000','Y')
insert into TestTblB values ('TWMUB','1000-100002-001','Y')
insert into TestTblB values ('TWMUC','1000-200005-000','Y')
insert into TestTblB values ('WWEXI','1000-401001-000','Y')
insert into TestTblB values ('WWEXI','1000-401002-000','Y')
insert into TestTblC values ('1000-000043-000','descrUA')
insert into TestTblC values ('1000-100002-001','descrUB')
insert into TestTblC values ('1000-200005-000','descrUC')
insert into TestTblC values ('1000-401001-000','descrWW')
insert into TestTblC values ('1000-401002-000','descrWW')
----------------Query follows------------
SELECT A.ShipDate,A.CP EId,
ItemId = CASE
WHEN A.CPEId = 'TWMUA' THEN 'New - Single User'
WHEN A.CPEID = 'TWMUB' THEN 'New - Multi User'
WHEN A.CPEID = 'TWMUC' THEN 'New - Triple User'
When B.ITEMID is NULL THEN 'Unknown'
When B.ITEMID = ' ' THEN 'Unknown'
else B.ItemId
end,
MODEL_NO = Case
When B.ITEMID = '1000-000043-000' Then rtrim(C.DESCR)
When B.ITEMID = '1000-100002-001' Then rtrim(C.DESCR)
When B.ITEMID = '1000-200005-000' Then rtrim(C.DESCR)
WHEN A.CPEId = 'TWMUA' THEN '1100'
WHEN A.CPEID = 'TWMUB' THEN '1100'
WHEN A.CPEID = 'TWMUC' THEN '1000SW'
When C.DESCR is NULL THEN 'Unknown'
else 'Unknown'
end ,
COUNT(A.phonenu m)
FROM TestTblA A LEFT OUTER JOIN TestTblB B ON A.CPEID=B.CPEID and
b.active = 'Y'
LEFT OUTER JOIN TestTblC C ON B.ItemId=C.ITEM ID
GROUP BY A.ShipDate,A.CP EId,B.ItemId,C. DESCR
ORDER BY A.ShipDate,A.CP EId,B.ItemId,C. DESCR
---- end of query
The result (modified the output format to fit a single line)
ShipDate CPEId ItemId MODEL_NO Count
2003-07-18 TWMUA New - Single User descrUA 2
2003-07-18 TWMUB New - Multi User descrUB 3
2003-07-18 TWMUC New - Triple User descrUC 3
2003-07-18 WWEXI 1000-401001-000 NULL 3
2003-07-18 WWEXI 1000-401002-000 NULL 3
** The problem **
I need WWEXI or any similar entry to only show once, it shows twice.
Thanks for your help.
many relationship between tableA and tableB. The query, tested schema
and the result is attached. Sorry for the long post.
Here is tested Schema and Data inserts.
----------------------
create table TestTblA
(ShipDate datetime,
CPEID varchar(30),
phonenum char(14))
go
create table TestTblB
(CPEID varchar(30),
itemID varchar(30),
active char(1))
go
create table TestTblC
(itemID varchar(30),
descr varchar(50))
go
insert into TestTblA values (getdate(),'TWM UA','(408)-555-1211')
insert into TestTblA values (getdate(),'TWM UA','(408)-555-1212')
insert into TestTblA values (getdate(),'TWM UB','(408)-555-1211')
insert into TestTblA values (getdate(),'TWM UB','(408)-555-1212')
insert into TestTblA values (getdate(),'TWM UB','(408)-555-1213')
insert into TestTblA values (getdate(),'TWM UC','(408)-555-1211')
insert into TestTblA values (getdate(),'TWM UC','(408)-555-1212')
insert into TestTblA values (getdate(),'TWM UC','(408)-555-1213')
insert into TestTblA values (getdate(),'WWE XI','(408)-555-1211')
insert into TestTblA values (getdate(),'WWE XI','(408)-555-1212')
insert into TestTblA values (getdate(),'WWE XI','(408)-555-1211')
insert into TestTblB values ('TWMUA','1000-000043-000','Y')
insert into TestTblB values ('TWMUB','1000-100002-001','Y')
insert into TestTblB values ('TWMUC','1000-200005-000','Y')
insert into TestTblB values ('WWEXI','1000-401001-000','Y')
insert into TestTblB values ('WWEXI','1000-401002-000','Y')
insert into TestTblC values ('1000-000043-000','descrUA')
insert into TestTblC values ('1000-100002-001','descrUB')
insert into TestTblC values ('1000-200005-000','descrUC')
insert into TestTblC values ('1000-401001-000','descrWW')
insert into TestTblC values ('1000-401002-000','descrWW')
----------------Query follows------------
SELECT A.ShipDate,A.CP EId,
ItemId = CASE
WHEN A.CPEId = 'TWMUA' THEN 'New - Single User'
WHEN A.CPEID = 'TWMUB' THEN 'New - Multi User'
WHEN A.CPEID = 'TWMUC' THEN 'New - Triple User'
When B.ITEMID is NULL THEN 'Unknown'
When B.ITEMID = ' ' THEN 'Unknown'
else B.ItemId
end,
MODEL_NO = Case
When B.ITEMID = '1000-000043-000' Then rtrim(C.DESCR)
When B.ITEMID = '1000-100002-001' Then rtrim(C.DESCR)
When B.ITEMID = '1000-200005-000' Then rtrim(C.DESCR)
WHEN A.CPEId = 'TWMUA' THEN '1100'
WHEN A.CPEID = 'TWMUB' THEN '1100'
WHEN A.CPEID = 'TWMUC' THEN '1000SW'
When C.DESCR is NULL THEN 'Unknown'
else 'Unknown'
end ,
COUNT(A.phonenu m)
FROM TestTblA A LEFT OUTER JOIN TestTblB B ON A.CPEID=B.CPEID and
b.active = 'Y'
LEFT OUTER JOIN TestTblC C ON B.ItemId=C.ITEM ID
GROUP BY A.ShipDate,A.CP EId,B.ItemId,C. DESCR
ORDER BY A.ShipDate,A.CP EId,B.ItemId,C. DESCR
---- end of query
The result (modified the output format to fit a single line)
ShipDate CPEId ItemId MODEL_NO Count
2003-07-18 TWMUA New - Single User descrUA 2
2003-07-18 TWMUB New - Multi User descrUB 3
2003-07-18 TWMUC New - Triple User descrUC 3
2003-07-18 WWEXI 1000-401001-000 NULL 3
2003-07-18 WWEXI 1000-401002-000 NULL 3
** The problem **
I need WWEXI or any similar entry to only show once, it shows twice.
Thanks for your help.
Comment