Reputation: 10943
I referred the this LINK but when I try to use the same format I am confused whether I have to use duplicate query or not.Becuase query am having is too lengthy.Please help me on this.
My query gives below result:
is_active, paid, tags_title
1 20 Testing
1 20 Development
1 21 Development
1 21 Testing
1 22 UI
Required result:
is_active, paid, tags_title
1 20 Testing, Development
1 21 Testing, Development
1 22 UI
Update Exact query below:
SELECT DISTINCT proj.is_active, tttm.tags_id,
pal.project_artifact_id
, STUFF((
SELECT ',' + t.tags_title
FROM task_tracker_tags T
WHERE T.tags_id = tttm.tags_id
FOR XML PATH('')
), 1, 1, '') AS tags_title
FROM project_artifact_list pal
LEFT JOIN task_tracker_mapper ttm
ON ttm.artifact_id = pal.Project_Artifact_Id
LEFT JOIN employees emp
ON emp.employee_id = ttm.employee_id
LEFT JOIN task_tracker_tags_mapper tttm
ON tttm.artifact_id = pal.Project_Artifact_id
LEFT JOIN projects proj
ON proj.project_id = tttm.project_id
WHERE pal.Child_Priority IN ('High','Low')
AND pal.artifact_status IN ('Open')
AND emp.employee_id IN (3932,1733)
AND proj.is_active = 1
AND pal.Due_Date <= '01/02/2017'
AND pal.Due_Date >= '01/01/1800'
GROUP BY proj.is_active,Project_Artifact_Id,tttm.tags_id;
Upvotes: 3
Views: 18715
Reputation: 5110
You can do this like
SELECT DISTINCT proj.is_active,
pal.paid
, STUFF((
SELECT ',' + ttt.tags_title
FROM task_tracker_tags T
WHERE T.tags_id = tttm.tags_id
FOR XML PATH('')
), 1, 1, '') AS tags_title
FROM person_aim_list pal
LEFT JOIN time_tace_map ttm
ON ttm.artifact_id = pal.paid
LEFT JOIN empires emp
ON emp.empire_id = ttm.empire_id
LEFT JOIN task_tracker_tags_mapper tttm
ON tttm.artifact_id = pal.paid
/* removed
LEFT JOIN task_tracker_tags ttt
ON ttt.tags_id = tttm.tags_id
*/
LEFT JOIN projects proj
ON proj.project_id = tttm.project_id
WHERE pal.child_priority IN ( 'High', 'Low' )
AND pal.artifact_status IN ( 'Open' )
AND emp.empire_id IN ( 3932, 1733 )
AND proj.is_active = 1
AND pal.due_date <= '01/02/2017'
AND pal.due_date >= '01/01/1800'
Edit:
In your Update, You mentioned 4 columns like
SELECT DISTINCT proj.is_active, tttm.tags_id,
pal.project_artifact_id
, STUFF((
SELECT ',' + t.tags_title
FROM task_tracker_tags T
WHERE T.tags_id = tttm.tags_id
FOR XML PATH('')
), 1, 1, '') AS tags_title
You need to change it to
SELECT DISTINCT proj.is_active ---, tttm.tags_id, Here your query making wrong output.
,pal.project_artifact_id
, STUFF((
SELECT ',' + t.tags_title
FROM task_tracker_tags T
WHERE T.tags_id = tttm.tags_id
FOR XML PATH('')
), 1, 1, '') AS tags_title
Upvotes: 2
Reputation: 10807
By adding the STUFF field, maybe you can avoid to use:
LEFT JOIN task_tracker_tags ttt
ON ttt.tags_id = tttm.tags_id
SELECT proj.is_active,
pal.paid,
title = STUFF(
(SELECT ',' + ttt.tags_title
FROM task_tracker_tags ttt
WHERE ttt.tags_id = tttm.tags_id
FOR XML PATH ('')), 1, 1, '')
FROM person_aim_list pal
LEFT JOIN time_tace_map ttm
ON ttm.artifact_id = pal.paid
LEFT JOIN empires emp
ON emp.empire_id = ttm.empire_id
LEFT JOIN task_tracker_tags_mapper tttm
ON tttm.artifact_id = pal.paid
LEFT JOIN projects proj
ON proj.project_id = tttm.project_id
WHERE pal.child_priority IN ( 'High', 'Low' )
AND pal.artifact_status IN ( 'Open' )
AND emp.empire_id IN ( 3932, 1733 )
AND proj.is_active = 1
AND pal.due_date <= '01/02/2017'
AND pal.due_date >= '01/01/1800'
GROUP BY proj.is_active,
pal.paid;
Upvotes: 0
Reputation: 306
I think this is the best way to archive your goal.
SELECT is_active, paid,
tags_title = STUFF(
(SELECT ',' + tags_title FROM table FOR XML PATH ('')), 1, 1, ''
)
FROM table GROUP BY is_active, paid
Upvotes: 0