View difference between Paste ID: uPRu8MBz and PsysZVyA
SHOW: | | - or go back to the newest paste.
1
DECLARE @ContactPerson TABLE (
2
Id INT,
3
Name NVARCHAR(50)
4
)
5
DECLARE @ContactEmail TABLE (
6
Id INT,
7
PersonId INT,
8
Email NVARCHAR(60),
9
PreferredInd INT
10
)
11
DECLARE @ContactPhone TABLE (
12
Id INT,
13
PersonId INT,
14
Phone NVARCHAR(20),
15
PreferredInd INT
16
)
17
18
DECLARE @ContactOrganization TABLE (
19
Id INT,
20
PersonId INT,
21
Organization NVARCHAR(60)
22
)
23
24
INSERT INTO @ContactPerson
25
SELECT 1, 'John Doe'
26
27
INSERT INTO @ContactEmail
28
        ( Id, PersonId, Email, PreferredInd )
29
SELECT 1, 1, '[email protected]', 0
30
UNION
31
SELECT 2, 1, '[email protected]', 1
32
UNION
33
SELECT 3, 1, '[email protected]', 0 
34
35
INSERT INTO @ContactPhone
36
        ( Id, PersonId, Phone, PreferredInd )
37
SELECT 1, 1, '888-867-5309', 1 
38
UNION
39
SELECT 2, 1, '305-476-5234', 0
40
41
INSERT INTO @ContactOrganization
42
        ( Id, PersonId, Organization )
43
SELECT 1, 1, 'US Government' UNION SELECT 2, 1, 'US Army'
44
45
SELECT DISTINCT cp.Id, cp.Name, Email, Phone, x2.Organization, x2.RowNum, ph.RowNum
46
FROM @ContactPerson cp
47
LEFT OUTER JOIN (SELECT DISTINCT cp.Id , Email , PreferredInd, ROW_NUMBER() OVER (ORDER BY ce.PreferredInd DESC, ce.Id) RowNum 
48-
INNER JOIN (SELECT 3 NumberCount) Numbers ON Numbers.numberCount >= Numbers.numberCount
48+
		FROM @ContactPerson cp
49-
LEFT OUTER JOIN (SELECT DISTINCT cp.Id , Email , PreferredInd, ROW_NUMBER() OVER (ORDER BY ce.PreferredInd DESC, ce.Id) RowNum FROM @ContactPerson cp
49+
		INNER JOIN @ContactEmail ce ON cp.Id = ce.PersonId 
50-
	LEFT OUTER JOIN @ContactEmail ce ON cp.Id = ce.PersonId ) em ON cp.Id = em.Id
50+
	) em ON cp.Id = em.Id
51-
LEFT OUTER JOIN (SELECT DISTINCT cp.Id , PreferredInd, Phone, ROW_NUMBER() OVER (ORDER BY ph.PreferredInd DESC, ph.Id) RowNum FROM @ContactPerson cp
51+
LEFT OUTER JOIN (SELECT DISTINCT cp.Id , PreferredInd, Phone, ROW_NUMBER() OVER (ORDER BY ph.PreferredInd DESC, ph.Id) RowNum 
52-
	LEFT OUTER JOIN @ContactPhone ph ON cp.Id = ph.PersonId ) ph ON cp.Id = ph.Id AND COALESCE(em.RowNum, ph.RowNum) = ph.RowNum AND COALESCE(em.PreferredInd, ph.PreferredInd) = ph.PreferredInd
52+
		FROM @ContactPerson cp
53-
LEFT OUTER JOIN (SELECT DISTINCT co.*, ROW_NUMBER() OVER (ORDER BY co.Organization) RowNum FROM @ContactPerson cp
53+
		INNER JOIN @ContactPhone ph ON cp.Id = ph.PersonId 
54-
				INNER JOIN @ContactOrganization co ON cp.Id = co.PersonId) x2 ON x2.PersonId = cp.Id AND COALESCE(em.RowNum, x2.RowNum) = x2.RowNum
54+
	) ph ON cp.Id = ph.Id AND COALESCE(em.RowNum, ph.RowNum) = ph.RowNum AND COALESCE(em.PreferredInd, ph.PreferredInd) = ph.PreferredInd
55
LEFT OUTER JOIN (SELECT DISTINCT co.*, ROW_NUMBER() OVER (ORDER BY co.Organization) RowNum 
56
		FROM @ContactPerson cp
57
		INNER JOIN @ContactOrganization co ON cp.Id = co.PersonId
58
	) x2 ON x2.PersonId = cp.Id AND COALESCE(em.RowNum, x2.RowNum) = x2.RowNum