我试图对Access中的计算进行编码,这涉及到一些值的和以及IF语句的结果。
下面是我正在处理的数据类型的表(来自‘CostBaseQuery’)
CompanyName Year AssetName DatapointID Datapointname DatapointValue
CompanyA 2011 AssetA 4025 Active operated wells 129
CompanyA 2011 AssetA 4058 API gravity of oil 38.5563255
CompanyA 2011 AssetA 4032 Number of gas lift wells 70
CompanyA 2011 AssetA 4033 Number of wells with ESPs 0
CompanyA 2011 AssetA 4036 Wells with CO2 production 25
CompanyA 2011 AssetA 4035 Wells with H2S production 9
CompanyA 2011 AssetA 4038 Wells with high pressure 0
CompanyA 2011 AssetA 4037 Wells with high temperature 0
CompanyA 2011 AssetA 4034 Wells with scale production 42
CompanyA 2011 AssetA 4039 Wells with wax 0计算需要SUM(DatapointValue),其中DatapointID IN (4032,4033,4035,4036,4037,4038,4039)
加上IF语句返回的值
如果(石油的比重为<=5或>20,使用ActiveOperatedWells值,否则为0)
我尝试使用下面的方法对计算进行编码,但是它会在和的每一次迭代中输出数据,而不是执行和计算,然后再输出IF语句。
SELECT qb1.CompanyName, qb1.AssetName, qb1.Year,
(SUM(qb1.DatapointValue)
+ IIF(qb2.DatapointValue>=5,
IIF(qb2.DatapointValue<20, qb3.DatapointValue, 0), 0))
AS NumberOfWellCompletions
FROM (CostBaseQuery AS qb1
INNER JOIN CostBaseQuery AS qb2
ON qb1.CompanyYearAssetID=qb2.CompanyYearAssetID)
INNER JOIN CostBaseQuery AS qb3
ON qb1.CompanyYearAssetID=qb3.CompanyYearAssetID
WHERE qb1.DatapointID IN (4032,4033,3036,4035,4038,4037,4034,4039)
AND qb2.DatapointID=4058 AND qb3.DatapointID=4025
GROUP BY qb1.CompanyName, qb1.AssetName, qb1.Year,
qb1.DatapointValue, qb2.DatapointValue, qb3.DatapointValue任何帮助都将是非常感谢的,我希望这比我以前的闲谈更有意义!
发布于 2012-09-04 16:33:22
这个问题对其他用户并没有真正的帮助,您也不会陈述您的实际问题,但是如果我按照我喜欢的方式缩进您的查询,像这样,
SELECT
b.CompanyName
, b.AssetName
, b.Year
, (
b.CalculationResult +
mp.CalculationResult
) AS NumberOfWellCompletions
FROM
(
SELECT
CompanyName
, AssetName
, Year
, SUM(q1.DatapointValue) AS CalculationResult
FROM
CostBaseQuery AS q1
WHERE
DatapointID in (
4032,
4033,
3036,
4035,
4038,
4037,
4034,
4039)
GROUP BY
CompanyName
, AssetName
, Year
) AS b
LEFT JOIN
(
SELECT
CompanyName
, AssetName
, Year
, (
SUM(
IIF(
qb2.DatapointValue>=5,
IIF(
qb2.DatapointValue<20,
qb3.DatapointValue,
0),
0)
)
FROM
CostBaseQuery qb3
WHERE
qb3.CompanyName = qb2.CompanyName
AND
qb3.AssetName = qb2.AssetName
AND
qb3.Year = qb2.Year
AND
qb3.DatapointID = 4025
GROUP BY
CompanyName
, AssetName
, Year
)
// What is going on here, this doesn't make sense.
) AS CalculationResult
FROM
CostBaseQuery AS qb2
WHERE
DatapointID = 4058
GROUP BY
CompanyName
, AssetName
, Year
) AS mp
ON
(b.CompanyName = mp.CompanyName)
AND
(b.AssetName = mp.AssetName)
AND
(b.Year = mp.Year);我可以看到,您有错误的括号数,所以就像Access Parser说的那样,您有一个语法错误。
如果我想为您编写您的查询,我需要更多关于您的数据库shcema的信息。但是,您应该尝试编写一些可以解析的SQL。
https://stackoverflow.com/questions/12262822
复制相似问题