因此,我目前正在使用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数组中,并且当前只是忽略了对“name”值的获取),浪费总是以null值的形式返回。我假设这是因为我正在做“null AS waste”,但我不知道如何在没有这个的情况下合并两个SELECT函数,因为第一个SELECT最初只选择了3个值。如果有人知道如何调整我的代码,我会非常感激,因为我对SQL很新,这有点超出了我的知识范围。谢谢!
答案 0 :(得分:0)
SELECT typeid,name,max(waste),greatest(0,sum(quantity)) quantity FROM ( ....
答案 1 :(得分:-1)
而不是使用(Union)将其替换为(Union All)