我想创建一个 sql 查询,它将返回一个包含这些字段的视图:
s.ItemCode, s.ItemName, s.ItmsGrpCod, s.ItmsGrpNam, t.Name, t.FormulaResult_Cost
t.FormulaResult_Cost
将使用以下公式计算:
CASE WHEN IsNull(T3.U_VAR5, 0) = 0 THEN 0 ELSE ROUND(((T0.AvgPrice * T3.U_VAR1 * T3.U_VAR2) + T3.U_VAR3) * T3.U_VAR4 / IsNull(T3.U_VAR5, 0), 5) END AS FormulaResult_Cost
变量(U_VAR4
等U_VAR5
)位于用户定义的表中,称为dbo.[@Z_VARIABLES]
我写的查询是:
SELECT TOP (100) PERCENT s.ItemCode, s.ItemName, s.ItmsGrpCod, s.ItmsGrpNam, t.Name, t.FormulaResult_Cost
FROM (SELECT DISTINCT T0.ItemCode, T0.ItemName, T0.ItmsGrpCod, T1.ItmsGrpNam
FROM dbo.OITM AS T0 INNER JOIN
dbo.OITB AS T1 ON T0.ItmsGrpCod = T1.ItmsGrpCod
WHERE (T0.QryGroup10 = 'Y')) AS s INNER JOIN
(SELECT T0.ItemCode, T3.Name, CASE WHEN IsNull(T3.U_VAR5, 0) = 0 THEN 0 ELSE ROUND(((T0.AvgPrice * T3.U_VAR1 * T3.U_VAR2) + T3.U_VAR3)
* T3.U_VAR4 / IsNull(T3.U_VAR5, 0), 5) END AS FormulaResult_Cost
FROM dbo.[@Z_VARIABLES] AS T3 CROSS JOIN
dbo.OITM AS T0) AS t ON s.ItemCode = t.ItemCode
ORDER BY s.ItemCode
t.Name
如果我对每个类别( :字段)只有一个公式,则此查询可以完美运行[@Z_VARIABLES]
。
现在我想为每个类别有不同的公式。
所以,我试着用这段代码来做:
SELECT TOP (100) PERCENT s.ItemCode, s.ItemName, s.ItmsGrpCod, s.ItmsGrpNam, t.Name, t.FormulaResult_Cost
FROM (
(SELECT DISTINCT T0.ItemCode, T0.ItemName, T0.ItmsGrpCod, T1.ItmsGrpNam
FROM dbo.OITM AS T0 INNER JOIN
dbo.OITB AS T1 ON T0.ItmsGrpCod = T1.ItmsGrpCod
WHERE (T0.QryGroup10 = 'Y')) AS s INNER JOIN
(SELECT * FROM dbo.[@Z_VARIABLES] AS T3 CROSS JOIN dbo.OITM AS T0,
(CASE t3.Name
WHEN 'KOUZINES' THEN
SELECT T0.ItemCode, T3.Name, CASE WHEN IsNull(T3.U_VAR5, 0) = 0 THEN 0 ELSE ROUND(((T0.AvgPrice * T3.U_VAR1 * T3.U_VAR2) + T3.U_VAR3) * T3.U_VAR4 / IsNull(T3.U_VAR5, 0), 5) END AS FormulaResult_Cost
FROM dbo.[@Z_VARIABLES] AS T3 CROSS JOIN dbo.OITM AS T0
WHEN 'NYPTIRES' THEN
SELECT T0.ItemCode, T3.Name, '3.333' AS FormulaResult_Cost
FROM dbo.[@Z_VARIABLES] AS T3 CROSS JOIN dbo.OITM AS T0
WHEN 'PATOUDES & KAPPAKIA' THEN
SELECT T0.ItemCode, T3.Name, '4.444' AS FormulaResult_Cost
FROM dbo.[@Z_VARIABLES] AS T3 CROSS JOIN dbo.OITM AS T0
ELSE
SELECT T0.ItemCode, T3.Name, '11.11' AS FormulaResult_Cost
FROM dbo.[@Z_VARIABLES] AS T3 CROSS JOIN dbo.OITM AS T0
END)
) AS t ON s.ItemCode = t.ItemCode
)
ORDER BY s.ItemCode
而这个查询,有很多错误,比如:
消息 156,第 15 级,状态 1,第 9 行 关键字“CASE”附近的语法不正确。 消息 156,第 15 级,状态 1,第 15 行 关键字“WHEN”附近的语法不正确。 消息 156,第 15 级,状态 1,第 18 行 关键字“WHEN”附近的语法不正确。 消息 156,第 15 级,状态 1,第 21 行 关键字“WHEN”附近的语法不正确。 消息 156,第 15 级,状态 1,第 24 行 关键字“WHEN”附近的语法不正确。 消息 156,第 15 级,状态 1,第 27 行 关键字“WHEN”附近的语法不正确。 消息 156,第 15 级,状态 1,第 30 行 关键字“WHEN”附近的语法不正确。 消息 156,第 15 级,状态 1,第 33 行 关键字“WHEN”附近的语法不正确。 消息 156,第 15 级,状态 1,第 36 行 关键字“WHEN”附近的语法不正确。 消息 156,第 15 级,状态 1,第 39 行 关键字“ELSE”附近的语法不正确。 消息 102,第 15 级,状态 1,第 42 行 ')' 附近的语法不正确。