0
我需要爲報表編寫SQL查詢。用戶可以選擇六個動態濾波器,即用戶可以選擇一個或兩個最多六個濾波器。可用於上述場景的SQL函數
在每個過濾器中,用戶從下拉列表中選擇設備的屬性,操作員及其值用戶需要輸入。這樣就構成了一個過濾器,e.g:
AttributeName Operator Value
Cost equal 480
AND MappedName contains DummyString
這裏的「成本」屬性和「480」是價值,這整個事情由一個過濾器。用類似的方式,用戶可以選擇最大。 6個濾波器 兩個濾波器之間的運算符也是動態的。它可以是「AND」或「OR」
在報告中,我需要爲每個過濾器動態生成一列以及一些靜態列,例如,器件名稱,器件製造是靜態列,而上述過濾器是動態的。
因此,當用戶選擇了兩個過濾器看起來像報告:
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函數,這將有助於我有效地編寫此邏輯。
如果我明白你需要做什麼,我認爲你需要看[dynamic sql](http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/dynamic.htm),根據選定的標準逐個建立您的查詢。可能傳入你自己的函數,也許會返回一個引用光標或其他東西。但是你需要非常小心SQL注入。 – 2012-07-12 16:28:49