Sql 按问题分组的多个别名,返回的行数超过需要的行数

Sql 按问题分组的多个别名,返回的行数超过需要的行数,sql,sql-server,Sql,Sql Server,我很难得到只有一行的输出。如果我没有包括TF.Table_字段\u Desc和TFV.Value项,则GROUP BY会给出一个错误,但它正在输出: 我试图得到一个结果,即不是重复前三列的六行和大量的空值,而是一行填充了所有列 我想我需要改变我做案例陈述的方式,但我不知道该怎么做。谢谢 SELECT V.Var_Desc, RTS.Route_Desc, T.Result, CASE WHEN TF.Table_Field_Desc = 'TestTime' THEN TFV.Value EN

我很难得到只有一行的输出。如果我没有包括
TF.Table_字段\u Desc
TFV.Value
项,则GROUP BY会给出一个错误,但它正在输出:

我试图得到一个结果,即不是重复前三列的六行和大量的空值,而是一行填充了所有列

我想我需要改变我做案例陈述的方式,但我不知道该怎么做。谢谢

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

我猜您想要一个更像这样的查询:

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;

冗余
near
T.Result
…+1:)Hrm,可能我没有正确地使用它,但当我这样做时,它返回正确的行数,但我所有的别名列都充满了空值。如果有区别,所有别名列都将具有字符串值。@RussRosenlof。您可以设置SQL小提琴吗?
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;