Reputation: 25
I'm having trouble getting an output that is only one line. The GROUP BY gives an error if I don't include the TF.Table_Field_Desc
and TFV.Value
items, but it's outputting:
I'm trying to get a result where instead of six rows with the first three columns being repeated and lots of nulls, I get one row with all my columns populated.
I think I need to change the way I'm doing my CASE statements but I'm just not sure how. Thanks!
SELECT V.Var_Desc, RTS.Route_Desc, T.Result,
CASE WHEN TF.Table_Field_Desc = 'TestTime' THEN TFV.Value END AS Duration,
CASE WHEN TF.Table_Field_Desc = 'LongTaskName' THEN TFV.Value END AS TaskName,
CASE WHEN TF.Table_Field_Desc = 'Criteria' THEN TFV.Value END AS Criteria,
CASE WHEN TF.Table_Field_Desc = 'Method' THEN TFV.Value END AS Method,
CASE WHEN TF.Table_Field_Desc = 'Hazards' THEN TFV.Value END AS Hazards,
CASE WHEN TF.Table_Field_Desc = 'TaskType' THEN TFV.Value END AS TaskType
FROM dbo.Tests AS T
RIGHT JOIN dbo.Table_Fields_Values AS TFV ON T.Var_Id = TFV.KeyId
RIGHT JOIN dbo.Table_Fields AS TF ON TFV.Table_Field_Id = TF.Table_Field_Id
RIGHT JOIN dbo.Variables AS V ON T.Var_Id = V.Var_Id
RIGHT JOIN dbo.RouteTasks AS RTKS ON T.Var_Id = RTKS.Var_Id
RIGHT JOIN dbo.Routes AS RTS ON RTKS.Route_Id = RTS.Route_Id
RIGHT JOIN dbo.TeamRoutes AS TMRTS ON RTKS.Route_Id = TMRTS.Route_Id
RIGHT JOIN dbo.Teams AS TMS ON TMRTS.Team_Id = TMS.Team_Id AND TMS.Team_Desc LIKE '%C Team%'
WHERE TFV.Table_Field_Id IN (31,32,35,40,41,42) AND (T.Result = 'Pending' OR T.Result = 'Late')
GROUP BY TFV.Value, TF.Table_Field_Desc, T.Result, V.Var_Desc, RTS.Route_Desc
ORDER BY Var_Desc
Upvotes: 1
Views: 40
Reputation: 1269633
I am guessing that you want a query more like this:
SELECT V.Var_Desc, RTS.Route_Desc, T.Result,
MAX(CASE WHEN TF.Table_Field_Desc = 'TestTime' THEN TFV.Value END) AS Duration,
MAX(CASE WHEN TF.Table_Field_Desc = 'LongTaskName' THEN TFV.Value END AS TaskName,
MAX(CASE WHEN TF.Table_Field_Desc = 'Criteria' THEN TFV.Value END) AS Criteria,
MAX(CASE WHEN TF.Table_Field_Desc = 'Method' THEN TFV.Value END) AS Method,
MAX(CASE WHEN TF.Table_Field_Desc = 'Hazards' THEN TFV.Value END) AS Hazards,
MAX(CASE WHEN TF.Table_Field_Desc = 'TaskType' THEN TFV.Value END) AS TaskType
FROM dbo.Tests AS T
RIGHT JOIN dbo.Table_Fields_Values AS TFV ON T.Var_Id = TFV.KeyId
RIGHT JOIN dbo.Table_Fields AS TF ON TFV.Table_Field_Id = TF.Table_Field_Id
RIGHT JOIN dbo.Variables AS V ON T.Var_Id = V.Var_Id
RIGHT JOIN dbo.RouteTasks AS RTKS ON T.Var_Id = RTKS.Var_Id
RIGHT JOIN dbo.Routes AS RTS ON RTKS.Route_Id = RTS.Route_Id
RIGHT JOIN dbo.TeamRoutes AS TMRTS ON RTKS.Route_Id = TMRTS.Route_Id
RIGHT JOIN dbo.Teams AS TMS ON TMRTS.Team_Id = TMS.Team_Id AND TMS.Team_Desc LIKE '%C Team%'
WHERE TFV.Table_Field_Id IN (31, 32, 35, 40, 41, 42) AND
T.Result IN ('Pending', 'Late')
GROUP BY V.Var_Desc, RTS.Route_Desc, T.Result,
ORDER BY Var_Desc;
Upvotes: 1
Reputation: 121912
SELECT
V.Var_Desc,
RTS.Route_Desc,
T.Result,
MAX(CASE WHEN TF.Table_Field_Desc = 'TestTime' THEN TFV.Value END) AS Duration,
MAX(CASE WHEN TF.Table_Field_Desc = 'LongTaskName' THEN TFV.Value END) AS TaskName,
MAX(CASE WHEN TF.Table_Field_Desc = 'Criteria' THEN TFV.Value END) AS Criteria,
MAX(CASE WHEN TF.Table_Field_Desc = 'Method' THEN TFV.Value END) AS Method,
MAX(CASE WHEN TF.Table_Field_Desc = 'Hazards' THEN TFV.Value END) AS Hazards,
MAX(CASE WHEN TF.Table_Field_Desc = 'TaskType' THEN TFV.Value END) AS TaskType
FROM dbo.Tests AS T
RIGHT JOIN ...
WHERE TFV.Table_Field_Id IN (31,32,35,40,41,42)
AND T.Result IN ('Pending', 'Late')
GROUP BY TFV.Value, T.Result, V.Var_Desc, RTS.Route_Desc
ORDER BY Var_Desc
Upvotes: 0