USP_DATALIST_DESIGNATION_HIERARCHY
This returns the designation hierarchy for the custom treeview.
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@DESIGNATIONID | uniqueidentifier | IN | |
@DESIGNATIONLEVEL1ID | uniqueidentifier | IN | |
@ACTIVEONLY | bit | IN |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_DESIGNATION_HIERARCHY
(
@DESIGNATIONID uniqueidentifier = null,
@DESIGNATIONLEVEL1ID uniqueidentifier = null,
@ACTIVEONLY bit = null
) as
set nocount on;
if @DESIGNATIONID is null
select D.ID,
DL.ID DESIGNATIONLEVELID,
DL.NAME,
FPT.DESCRIPTION DESIGNATIONLEVELTYPE,
D.ISACTIVE,
(select count(DES.ID) from dbo.DESIGNATION DES
where DES.DESIGNATIONLEVEL1ID = D.DESIGNATIONLEVEL1ID) CHILDCOUNT
from dbo.DESIGNATION D
inner join dbo.DESIGNATIONLEVEL DL on D.DESIGNATIONLEVEL1ID = DL.ID
inner join dbo.DESIGNATIONLEVELTYPE FPT on DL.DESIGNATIONLEVELTYPEID = FPT.ID
where (D.DESIGNATIONLEVEL1ID = @DESIGNATIONLEVEL1ID or @DESIGNATIONLEVEL1ID is null) and
D.DESIGNATIONLEVEL2ID is null and
(D.ISACTIVE = 1 or @ACTIVEONLY is null)
else
begin
declare @DL1 uniqueidentifier;
declare @DL2 uniqueidentifier;
declare @DL3 uniqueidentifier;
declare @DL4 uniqueidentifier;
declare @DL5 uniqueidentifier;
declare @LEVEL int;
select @DL1 = DESIGNATIONLEVEL1ID,
@DL2 = DESIGNATIONLEVEL2ID,
@DL3 = DESIGNATIONLEVEL3ID,
@DL4 = DESIGNATIONLEVEL4ID,
@DL5 = DESIGNATIONLEVEL5ID,
@LEVEL = case when DESIGNATIONLEVEL2ID is null then 2
when DESIGNATIONLEVEL3ID is null then 3
when DESIGNATIONLEVEL4ID is null then 4
else 5
end
from dbo.DESIGNATION
where ID = @DESIGNATIONID;
select D.ID,
DL.ID DESIGNATIONLEVELID,
DL.NAME,
FPT.DESCRIPTION DESIGNATIONLEVELTYPE,
D.ISACTIVE,
case when exists (select top 1 DES.ID from dbo.DESIGNATION DES
where DES.ID <> D.ID and DES.DESIGNATIONLEVEL1ID = D.DESIGNATIONLEVEL1ID and
(DES.DESIGNATIONLEVEL2ID = D.DESIGNATIONLEVEL2ID) and
(DES.DESIGNATIONLEVEL3ID = D.DESIGNATIONLEVEL3ID or D.DESIGNATIONLEVEL3ID is null) and
(DES.DESIGNATIONLEVEL4ID = D.DESIGNATIONLEVEL4ID or D.DESIGNATIONLEVEL4ID is null) and
(DES.DESIGNATIONLEVEL5ID = D.DESIGNATIONLEVEL5ID or D.DESIGNATIONLEVEL5ID is null))
then 2 else 0 end
as CHILDCOUNT
from dbo.DESIGNATION as D
inner join dbo.DESIGNATIONLEVEL DL
on DL.ID =
case @LEVEL
when 2 then D.DESIGNATIONLEVEL2ID
when 3 then D.DESIGNATIONLEVEL3ID
when 4 then D.DESIGNATIONLEVEL4ID
when 5 then D.DESIGNATIONLEVEL5ID
end
inner join dbo.DESIGNATIONLEVELTYPE FPT on DL.DESIGNATIONLEVELTYPEID = FPT.ID
where
((D.DESIGNATIONLEVEL1ID = @DL1) and
((@LEVEL = 2 and D.DESIGNATIONLEVEL3ID is null) or
(@LEVEL = 3 and D.DESIGNATIONLEVEL2ID = @DL2 and D.DESIGNATIONLEVEL4ID is null) or
(@LEVEL = 4 and D.DESIGNATIONLEVEL2ID = @DL2 and D.DESIGNATIONLEVEL3ID = @DL3 and D.DESIGNATIONLEVEL5ID is null) or
(@LEVEL = 5 and D.DESIGNATIONLEVEL4ID = @DL4 and D.DESIGNATIONLEVEL3ID = @DL3 and D.DESIGNATIONLEVEL2ID = @DL2)))
end