UFN_RELATIONSHIPSBYMARRIAGE
Returns table containing all new relationships given a parent and its child constituent ids.
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@PARENTID | uniqueidentifier | IN | |
@CHILDID | uniqueidentifier | IN |
Definition
Copy
CREATE function dbo.UFN_RELATIONSHIPSBYMARRIAGE
(
@PARENTID uniqueidentifier,
@CHILDID uniqueidentifier
)
returns @RESULT table
(
ID uniqueidentifier,
RECIPROCALCONSTITUENTID uniqueidentifier,
RECIPROCALTYPECODEID uniqueidentifier,
RELATIONSHIPCONSTITUENTID uniqueidentifier,
RELATIONSHIPTYPECODEID uniqueidentifier,
MARRIAGERELATIONSHIP bit
)
as
begin
declare @SPOUSEID uniqueidentifier;
select
@SPOUSEID = RELATIONSHIP.RECIPROCALCONSTITUENTID
from dbo.CONSTITUENT CONSTIT
left join dbo.RELATIONSHIP
on RELATIONSHIP.RELATIONSHIPCONSTITUENTID = CONSTIT.ID and RELATIONSHIP.ISSPOUSE = 1
left join dbo.CONSTITUENT SPOUSE
on RELATIONSHIP.RECIPROCALCONSTITUENTID = SPOUSE.ID
where CONSTIT.ID = @PARENTID
insert into @RESULT
--from children
SELECT
RELATIONSHIP.ID,
RELATIONSHIP.RECIPROCALCONSTITUENTID,
RELATIONSHIP.RECIPROCALTYPECODEID,
RELATIONSHIP.RELATIONSHIPCONSTITUENTID,
RELATIONSHIP.RELATIONSHIPTYPECODEID,
0 MARRIAGERELATIONSHIP
FROM dbo.RELATIONSHIP
inner join dbo.RELATIONSHIPBYMARRIAGE
on RELATIONSHIPBYMARRIAGE.RELATIONSHIPID = RELATIONSHIP.ID
inner join dbo.RELATIONSHIP MARRIAGE
on RELATIONSHIPBYMARRIAGE.MARRIAGERELATIONSHIPID = MARRIAGE.ID
where
MARRIAGE.RELATIONSHIPCONSTITUENTID in (@SPOUSEID, @PARENTID) and
RELATIONSHIP.RELATIONSHIPCONSTITUENTID = @CHILDID AND
@CHILDID not in (@SPOUSEID, @PARENTID) and
(
(RELATIONSHIP.RECIPROCALCONSTITUENTID = @SPOUSEID OR --linked to spouse
RELATIONSHIP.RECIPROCALCONSTITUENTID in --linked to sibling type relationships with spouse
(select RELATIONSHIPCONSTITUENTID
FROM dbo.RELATIONSHIP
where RECIPROCALCONSTITUENTID = @SPOUSEID)
)
or
(RELATIONSHIP.RECIPROCALCONSTITUENTID = @PARENTID OR --linked to parent
RELATIONSHIP.RECIPROCALCONSTITUENTID in --linked to sibling type relationships with parent
(select RELATIONSHIPCONSTITUENTID
FROM dbo.RELATIONSHIP
where RECIPROCALCONSTITUENTID = @PARENTID)
)
)
union
--marriage
SELECT
RELATIONSHIP.ID,
RELATIONSHIP.RECIPROCALCONSTITUENTID,
RELATIONSHIP.RECIPROCALTYPECODEID,
RELATIONSHIP.RELATIONSHIPCONSTITUENTID,
RELATIONSHIP.RELATIONSHIPTYPECODEID,
case when RELATIONSHIP.ISSPOUSE = 1 then 1 else 0 end MARRIAGERELATIONSHIP
FROM dbo.RELATIONSHIP
where
(
RELATIONSHIP.RECIPROCALCONSTITUENTID = @PARENTID and
RELATIONSHIP.RELATIONSHIPCONSTITUENTID = @SPOUSEID and
@CHILDID = @SPOUSEID
)
or
(
RELATIONSHIP.RECIPROCALCONSTITUENTID = @SPOUSEID and
RELATIONSHIP.RELATIONSHIPCONSTITUENTID = @PARENTID and
@CHILDID = @PARENTID
)
union
--from parents
SELECT
RELATIONSHIP.ID,
RELATIONSHIP.RECIPROCALCONSTITUENTID,
RELATIONSHIP.RECIPROCALTYPECODEID,
RELATIONSHIP.RELATIONSHIPCONSTITUENTID,
RELATIONSHIP.RELATIONSHIPTYPECODEID,
0 MARRIAGERELATIONSHIP
FROM dbo.RELATIONSHIP
inner join dbo.RELATIONSHIPBYMARRIAGE
on RELATIONSHIPBYMARRIAGE.RELATIONSHIPID = RELATIONSHIP.ID
where
RELATIONSHIP.RELATIONSHIPCONSTITUENTID = @CHILDID and
(
((@CHILDID = @SPOUSEID) and
RELATIONSHIP.RECIPROCALCONSTITUENTID in
(select RELATIONSHIPCONSTITUENTID
FROM dbo.RELATIONSHIP
where RECIPROCALCONSTITUENTID = @PARENTID))
or
((@CHILDID = @PARENTID) and
RELATIONSHIP.RECIPROCALCONSTITUENTID in
(select RELATIONSHIPCONSTITUENTID
FROM dbo.RELATIONSHIP
where RECIPROCALCONSTITUENTID = @SPOUSEID))
)
return;
end