I have some tables, let's call them table ApprovalHierarchy
ID GroupApp ParentID
1 Project NULL
2 Leader Mechanical 1
3 Engineer Mechanical 2
4 Leader Electrical 1
5 Engineer Electrical 4
And this is table GroupMember
ID GroupID Username Password
1 1 Frey 12345
2 2 Anne 12345
3 2 Bryan 12345
4 3 Belle 12345
5 3 Will 12345
6 4 Drio 12345
7 5 Maxio 12345
8 5 James 12345
GroupID
is a column which contains id from table ApprovalHierarchy
, for example Username : Frey
have GroupID : 1
that is Frey as Project
And I have one more table, let's call them table Mailbox
, and in column Approval
this is the output that I meant. I need to insert/update column Approval
, if FromUser
and also same with Username
have GroupID
and have ParentID
, I want write that Username
in column Approval
, this is for example the output that I want in column Approval
:
ID FromUser ToUser Message Approval
1 Belle Client Hello Anne, Bryan
2 Anne Client Hai Frey
3 Maxio Client Hii Drio
4 Drio Client hey Frey
This is for table Mailbox
This is the query in table Mailbox
that I meant
CREATE TABLE Mailbox (
ID INT
,FromUser NVARCHAR(100)
,ToUser NVARCHAR(100)
,Message NVARCHAR(100)
,Approver NVARCHAR(100)
)
INSERT INTO dbo.Mailbox
VALUES
(1,'Belle','Client','Hello',' '),
(2, 'Anne', 'Client', 'Hai', ' '),
(3, 'Maxio', 'Client', 'Hii', ' '),
(4, 'Drio', 'Client' , 'hey', ' ')
ID FromUser ToUser Message Approval
1 Belle Client Hello Group 2
2 Anne Client Hai Group 1
3 Maxio Client Hii Group 4
4 Drio Client hey Group 1
Here is the query. DBFIDDLE working code
SELECT a.ID
,a.[From User]
,a.[To User]
,a.Message
,ISNULL(SUBSTRING(a.Approver, 0, LEN(a.Approver)), 'No Approver Exists') [Approver]
FROM (
SELECT Id
,Username [From User]
,'Client' [To User]
,'Hi' [Message]
,(
SELECT gm.Username + ',' [text()]
FROM dbo.ApprovalHierarchy ah
JOIN dbo.GroupMember gm ON ah.ParentID = gm.GroupID
WHERE ah.Id = gmm.GroupID
FOR XML PATH('')
,TYPE
).value('.', 'NVARCHAR(MAX)') [Approver]
FROM dbo.GroupMember gmm
) a
Update Query:
UPDATE m
SET m.Approver = ISNULL(SUBSTRING(a.Approver, 0, LEN(a.Approver)), 'No Approver Exists')
FROM (
SELECT Id
,Username
,'Client' [To User]
,'Hi' [Message]
,(
SELECT gm.Username + ', ' [text()]
FROM dbo.ApprovalHierarchy ah
JOIN dbo.GroupMember gm ON ah.ParentID = gm.GroupID
WHERE ah.Id = gmm.GroupID
FOR XML PATH('')
,TYPE
).value('.', 'NVARCHAR(MAX)') [Approver]
FROM dbo.GroupMember gmm
) a
INNER JOIN dbo.Mailbox m ON a.Username = m.FromUser
SELECT *
FROM dbo.Mailbox
Update Query to update the Group {GroupId}
UPDATE m
SET m.Approver = IIF(a.Approver = 'Group ', 'No Approver Exists', a.Approver)
FROM (
SELECT gmm.Id
,Username
,'Client' [To User]
,'Hi' [Message]
,'Group ' + CAST(ah.ParentId AS NVARCHAR(MAX)) [Approver]
FROM dbo.GroupMember gmm
INNER JOIN dbo.ApprovalHierarchy ah ON gmm.GroupId = ah.Id
) a
INNER JOIN dbo.Mailbox m ON a.Username = m.FromUser
Select Results:
Results from Mailbox after update:
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.