This is my query:
SELECT
wp.WorkplanID,
STUFF((SELECT ', ' + ISNULL(ul.FirstName + ' ', '') + ISNULL(ul.LastName, '')
FROM UserLogin ul
INNER JOIN Vendors v ON ul.UserLoginID = v.UserLoginID
INNER JOIN dbo.WorkPlanVendors wpv ON wpv.VendorID = CAST(v.VendorID AS INT)
WHERE wpv.WorkPlanID = wp.WorkPlanID
FOR XML PATH('')), 1, 2, '') AS VendorName,
STUFF((SELECT ', ' + v.PrimaryPhone
FROM UserLogin ul
INNER JOIN Vendors v ON ul.UserLoginID = v.UserLoginID
INNER JOIN dbo.WorkPlanVendors wpv ON wpv.VendorID = CAST(v.VendorID AS INT)
WHERE wpv.WorkPlanID = wp.WorkPlanID
FOR XML PATH('')), 1, 2, '') AS PrimaryPhone,
STUFF((SELECT ', ' + ul.Email
FROM UserLogin ul
INNER JOIN Vendors v ON ul.UserLoginID = v.UserLoginID
INNER JOIN dbo.WorkPlanVendors wpv ON wpv.VendorID = CAST(v.VendorID AS INT)
WHERE wpv.WorkPlanID = wp.WorkPlanID
FOR XML PATH('')), 1, 2, '') AS Email
FROM WorkPlan wp
It is taking 5 seconds to get data but I want to make it faster.
STRING_AGGso you don't need 3 subqueries would be an excellent start.valuemethod give a little performance benefit:...FOR XML PATH(''),TYPE).value('(./text())[1]','varchar(MAX)')...CAST; why are the datatypes ofVendorIDdifferent inWorkPlanVendorsandVendors? It appears you aren't getting an error, so there aren't invalidintvalues inVendors, so fixing the data type would be of benefit as its makes the query SARGable.