レポートの SQL クエリを作成する必要があります。ユーザーは動的な 6 つのフィルターを選択できます。つまり、ユーザーは 1 つまたは 2 つから最大 6 つのフィルターを選択できます。
各フィルターで、ユーザーはドロップダウンからデバイスの属性、演算子、およびユーザーが入力する必要があるその値を選択します。これは単一のフィルターを構成します。例:
AttributeName Operator Value
Cost equal 480
AND MappedName contains DummyString
ここで、「コスト」は属性で、「480」は値で、この全体が 1 つのフィルタで構成されています。同様の方法で、ユーザーは最大を選択できます。6 フィルター また、2 つのフィルター間の演算子も動的です。「AND」または「OR」を指定できます
レポートでは、いくつかの静的な列と共に各フィルターの列を動的に生成する必要があります。たとえば、デバイス名、デバイスの製造元は静的な列ですが、上記のフィルターは動的です。
したがって、ユーザーが 2 つのフィルターを選択した場合のレポートは次のようになります。
DeviceName DeviceManufactur Cost MappedName
D1 DM1 480 DummyString
D2 DM2 480 DummyString
データベースでは、属性は次のように保存されます。
DeviceName DeviceManufactur AttributeName AttributeValue
D1 DM1 Cost 480
D1 DM1 MappedName DummyString
D2 DM2 Cost 480
D2 DM2 MappedName DummyString
したがって、次のような単純なSQLを書くと
select d.name,d.manufacture,d.AttName,d.value
from Device d
where d.AttName='Cost' and d.AttValie='480'
and d.AttName='MappedName' and d.AttValue='DummyString'
デバイスは両方の属性に関連付けられていますが、レコードは表示されません。
このロジックを効率的に書くのに役立つSQLの特定の機能を誰かが提案できますか?