这是我的SQL语句。它不起作用。
UPDATE dbo.Smoothie
SET TotalCalories = (SELECT
SUM(CASE WHEN (Unit = 2) THEN f.Energ_Kcal * f.GmWt_2 * si.Quantity / 100
ELSE f.Energ_Kcal * f.GmWt_1 * si.Quantity / 100
END) AS calories
FROM dbo.SmoothieIngredients AS si
INNER JOIN dbo.FoodAbbrev AS f ON si.FoodId = f.Id
WHERE si.SmoothieId = SmoothieId ---> i want to pass the SmoothieId from the main update statement to the subquery.
)
我试着给它起一个名字S2,但仍然无效。
UPDATE dbo.Smoothie as S2
SET S2.TotalCalories = (SELECT
SUM(CASE WHEN (Unit = 2) THEN f.Energ_Kcal * f.GmWt_2 * si.Quantity / 100
ELSE f.Energ_Kcal * f.GmWt_1 * si.Quantity / 100
END) AS calories
FROM dbo.SmoothieIngredients AS si
INNER JOIN dbo.FoodAbbrev AS f ON si.FoodId = f.Id
WHERE si.SmoothieId = S2.SmoothieId)
答案 0 :(得分:2)
您需要使用查询创建新表,然后将TotalCalories的值设置为列中的值。
所以在这种情况下:
UPDATE dbo.Smoothie
SET TotalCalories = s2.calories
FROM
( SELECT
smoothieId,
SUM(CASE WHEN (Unit = 2) THEN f.Energ_Kcal * f.GmWt_2 * si.Quantity / 100
ELSE f.Energ_Kcal * f.GmWt_1 * si.Quantity / 100 END) AS calories
FROM dbo.SmoothieIngredients AS si
INNER JOIN dbo.FoodAbbrev AS f ON si.FoodId = f.Id
GROUP BY SmoothieId
) AS s2
WHERE dbo.Smoothie.Id = s2.smoothieId
我的查询可能略有错误,但请在s2表的查询中记下Group By,然后将这些行与Where子句正常链接。