1

そのため、私は現在 EVE Static Database Export を使用しており、プログラムの残りの部分に必要な値のリストを報告しようとしたときに問題が発生しました。現在、以下を使用して、設計図に必要な 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 にはもともと 3 つの値しか選択されていなかったため、これを使用せずに 2 つの SELECT 関数をマージする方法についてはわかりません。私はSQLにかなり慣れていないため、コードをどのように調整する必要があるかについて誰かが考えを持っていれば、非常に感謝しています。これは私の知識の範囲を少し超えています。ありがとう!

4

2 に答える 2

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