Need to create combinations of Parents/Children/Dogs, but can't get past 2nd level of CTE
-
01-11-2019 - |
Question
I've hit a brick wall and please ask help.
I'm building a table up for (in this example) a ticketing system where e.g. Ticket 1 will allow Parent: Either parent Peter or Sally, Child: to come without a child or with a child (either Sam, Pete or John), Dog: and either without a dog or with one of the dogs (DogMatix,Snowy,Bliksem)
The table layout is that the Parent/Child/Dog is a parameter, and I can get (with CTE) to the Parent/Child relationships to all show, but not the next level showing the dogs too
declare @Ticket table
(
TID int
)
declare @Param table
(PID int IDENTITY(1,1) not null,
TID int,
ParamType varchar(20),
Val varchar(40)
)
Insert into @Ticket(TID) Select(1)
Insert into @Ticket(TID) Select(2)
Insert into @Param(TID,ParamType,Val) values(1,'Parent','ParentPeter')
Insert into @Param(TID,ParamType,Val) values(1,'Parent','ParentSally')
Insert into @Param(TID,ParamType,Val) values(1,'Child','ChildSam')
Insert into @Param(TID,ParamType,Val) values(1,'Child','ChildPete')
Insert into @Param(TID,ParamType,Val) values(1,'Child','ChildJohn')
Insert into @Param(TID,ParamType,Val) values(1,'Dog','DogDogMatix')
Insert into @Param(TID,ParamType,Val) values(1,'Dog','DogSnowy')
Insert into @Param(TID,ParamType,Val) values(1,'Dog','DogBliksem')
Insert into @Param(TID,ParamType,Val) values(2,'Parent','ParentParker')
Insert into @Param(TID,ParamType,Val) values(2,'Parent','ParentScarlett')
Insert into @Param(TID,ParamType,Val) values(2,'Child','ChildBrett')
Insert into @Param(TID,ParamType,Val) values(2,'Child','ChildBritney')
Insert into @Param(TID,ParamType,Val) values(2,'Child','ChildBronwyn')
Insert into @Param(TID,ParamType,Val) values(2,'Dog','DogRover')
Insert into @Param(TID,ParamType,Val) values(2,'Dog','Dog2')
Insert into @Param(TID,ParamType,Val) values(2,'Dog','Dog3')
;with cte as (
Select TID,Val as 'Parent'
from @Param p
where p.ParamType = 'Parent'
)
Select cte.TID,cte.Parent,p.Val as 'Child'
from cte
left outer join @Param p on p.TID = cte.TID and p.ParamType = 'Child'
--The required results will be (for ticket 1)
--TID Parent Child Dog
--1 ParentPeter ChildSam DogDogMatix
--1 ParentPeter ChildSam DogSnowy
--1 ParentPeter ChildSam DogBliksem
--1 ParentPeter ChildPete DogDogMatix
--1 ParentPeter ChildPete DogSnowy
--1 ParentPeter ChildPete DogBliksem
--1 ParentPeter ChildJohn DogDogMatix
--1 ParentPeter ChildJohn DogSnowy
--1 ParentPeter ChildJohn DogBliksem
--1 ParentPeter null null
--1 ParentPeter ChildSam null
--1 ParentPeter ChildPete null
--1 ParentPeter ChildJohn null
--1 ParentSally ChildSam DogDogMatix
--1 ParentSally ChildSam DogSnowy
--1 ParentSally ChildSam DogBliksem
--1 ParentSally ChildPete DogDogMatix
--1 ParentSally ChildPete DogSnowy
--1 ParentSally ChildPete DogBliksem
--1 ParentSally ChildJohn DogDogMatix
--1 ParentSally ChildJohn DogSnowy
--1 ParentSally ChildJohn DogBliksem
--1 ParentSally null null
--1 ParentSally ChildSam null
--1 ParentSally ChildPete null
--1 ParentSally ChildJohn null
No correct solution
Licensed under: CC-BY-SA with attribution
Not affiliated with dba.stackexchange