1

因此,我目前正在使用 EVE 静态数据库导出,并且在尝试报告程序其余部分所需的值列表时遇到了障碍。我目前正在尝试使用以下方法获取蓝图所需的 typeID、名称、废物和数量:

SELECT typeid,name,waste,greatest(0,sum(quantity)) quantity FROM ( 
    SELECT invTypes.typeid typeid,invTypes.typeName name,null AS waste,quantity 
    FROM invTypes,invTypeMaterials 
    WHERE invTypeMaterials.materialTypeID=invTypes.typeID 
    and invTypeMaterials.TypeID=@paramID 
  UNION 
    SELECT invTypes.typeid typeid,invTypes.typeName name,invBlueprintTypes.wasteFactor 
    waste, invTypeMaterials.quantity*r.quantity*-1 quantity 
    FROM invTypes,invTypeMaterials,ramTypeRequirements r,invBlueprintTypes 
    WHERE invTypeMaterials.materialTypeID=invTypes.typeID 
    and invTypeMaterials.TypeID =r.requiredTypeID 
    and r.typeID = invBlueprintTypes.blueprintTypeID and r.activityID = 1 
    and invBlueprintTypes.productTypeID=@paramID and r.recycle=1 
) t GROUP BY typeid,name

现在,这个 SQL 改编自之前的一组没有返回浪费值的代码。wasteFactor 存储在数据库的 invBlueprintTypes 表中。每当我运行我的程序并使用此函数时(我有一组单独的代码将值加载到 C# List 数组中,目前只是忽略获取“名称”值),浪费总是作为空值返回。我假设这是因为我在做“空 AS 浪费”,但我不知道如何在没有这个的情况下合并两个 SELECT 函数,因为第一个 SELECT 最初只选择了 3 个值。如果有人知道我应该如何调整我的代码,我将不胜感激,因为我对 SQL 相当陌生,这有点超出我的知识范围。谢谢!

4

2 回答 2

0
SELECT typeid,name,max(waste),greatest(0,sum(quantity)) quantity FROM (  ....
于 2013-07-09T09:18:05.080 回答
-1

而不是使用 (Union) 将其替换为 (Union All)

于 2013-07-09T09:21:22.997 回答