Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql查询,以转换公共基本单位(公顷)的面积,然后获取其总和_Sql_Sql Server 2008 - Fatal编程技术网

Sql查询,以转换公共基本单位(公顷)的面积,然后获取其总和

Sql查询,以转换公共基本单位(公顷)的面积,然后获取其总和,sql,sql-server-2008,Sql,Sql Server 2008,我有一个单位表,其值为基本单位和换算单位 现在我有另一个表,它有总面积和采集面积的值,但值是以不同的单位表示的 我想将总面积和采集面积转换为公顷,然后将它们相加,假设您无法修复数据结构: SELECT Total_Area * TotalConvertingTable.Base_Unit / TotalConvertingTable.Converting_Unit AS TotalHectareArea , Acquired_Area * AcquiredConvertingTab

我有一个单位表,其值为基本单位和换算单位

现在我有另一个表,它有总面积和采集面积的值,但值是以不同的单位表示的
我想将总面积和采集面积转换为公顷,然后将它们相加,假设您无法修复数据结构:

SELECT Total_Area * TotalConvertingTable.Base_Unit / TotalConvertingTable.Converting_Unit AS TotalHectareArea
       , Acquired_Area * AcquiredConvertingTable.Base_Unit / AcquiredConvertingTable.Converting_Unit AS AcquiredHectareArea
     FROM
         AreaTable
     INNER JOIN
         ConvertingTable AS TotalConvertingTable
     ON
         AreaTable.Total_Area_Unit_Code = TotalConvertingTable.Unit_Name
     INNER JOIN
         ConvertingTable AS AcquiredConvertingTable
     ON
         AreaTable.Acquired_Area_Unit_Code = AcquiredConvertingTable.Unit_Name
AreaTable是问题中列出的第二个表。可转换为第一个

我们将面积连接到转换表以获得转换因子,然后将源单位乘以转换因子以获得以公顷为单位的输出

我们还假设转换表仅包括公顷的基本单位,如果需要,您可以非常简单地过滤掉任何其他单位

要包含_1字段,需要额外的联接

SELECT SUM((t.Total_Area / (u.Converting_Unit / u.Base_Unit) + 
           (t.Total_Area1 / (u3.Converting_Unit / u3.Base_Unit)))) AS Sum_Total_Area,
       SUM((t.Acquired_Area / (u2.Converting_Unit / u2.Base_Unit) + 
           (t.Acquired_Area1 / (u4.Converting_Unit / u4.Base_Unit)))) AS Sum_Acquired_Area, 
       MAX(u4.Base_UnitCode) AS Base_Unit
FROM dbo.Total t JOIN dbo.Units u ON t.Total_Area_UnitCode = u.Unit_Name                 
                 JOIN dbo.Units u2 ON t.Acquired_Area_UnitCode = u2.Unit_Name
                 JOIN dbo.Units u3 ON t.Total_Area_UnitCode1 = u3.Unit_Name
                 JOIN dbo.Units u4 ON t.Acquired_Area_UnitCode1 = u4.Unit_Name

演示

这看起来您可能应该规范化您的表。或者这是故意的?我没有设计数据库,但我必须创建一个存储过程来获得所需的结果为什么1 bigha=2.5公顷?@Alexander Fedorenko它是一个通用值2.5公顷=1 bigha。你能解释一下你的查询是如何获取AreaIdentifier以及如何转换总面积和获取的面积吗?我的回答中有一个假设在区域表中有一个主键要联接。如果不是这样,那么您需要一个不同的查询。看起来单位转换比我之前回答时想象的要复杂一些,我将进行编辑以获得更好的计算单位表和面积表之间没有关系,因此没有主键。如果你能编辑你的答案@james我认为计算可能是这样的如果总面积是公顷那么“换算计算”否则如果总面积单位是比加那么“换算计算”thnx对于答案@Alexander Fedorenko让我试试,我会标记你的答案。所需的小改动是我想要两列(总面积+总面积1)和(AcquiredArea+AcquiredArea1)但是我会这么做的..thnx a lotthnx@Alexander Fedorenko我知道我已经花了你很多精力,但我只想在这个查询中做一点小小的改变..你想试试吗