2011-04-19 84 views
2
SELECT 
    CASE Forms!FormName!ComboBox 
    WHEN Is Not Null THEN (ParentTable.Column) 
    FROM (Parent) 
     WHERE (((ParentTable.Column)=Forms!FormName!ComboBox)) 
    ELSE 
    ((ParentTable.Column) FROM Parent END; 

好吧,我有一個窗體顯示來自父表的記錄,我希望能夠過濾它。那麼上面的SQL代碼試圖完成的是,如果在組合框中有選擇,則只選擇與該字段匹配的記錄。其他情況是該字段爲空,它只是選擇所有記錄。我對SQL代碼不是很熟悉,所以請儘可能解釋使用的不同參數。在選擇SQL查詢中使用案例選擇

或者有可能我可以使用某種if語句來代替?

+0

'SQL'的什麼實現? Oracle,Sql服務器,MySQl,PostGres? – JNK 2011-04-19 20:36:10

+0

SQL看起來破損。至少有缺失和重複的括號。 – 2011-04-19 20:41:35

+0

我在Microsoft Access中使用sql – Zack 2011-04-19 20:58:29

回答

0

注意!。

的MS Access

SELECT <YOUR_SELECT_LIST> 
    FROM ParentTable 
    WHERE NZ(Forms!FormName!ComboBox, ParentTable.Column) = ParentTable.Column 

對於SQL Server

SELECT <YOUR_SELECT_LIST> 
    FROM ParentTable 
    WHERE ISNULL(Forms!FormName!ComboBox, ParentTable.Column) = ParentTable.Column 

對於ORACLE

SELECT <YOUR_SELECT_LIST> 
    FROM ParentTable 
    WHERE NVL(Forms!FormName!ComboBox, ParentTable.Column) = ParentTable.Column   
+0

I在微軟訪問中使用sql。那是哪一個? – Zack 2011-04-19 20:59:00

+0

另外我不知道你的意思是動態綁定這個值。我很抱歉沒有幫助。 如果組合框的值爲空,我希望parenttable.column中的所有記錄,否則我只想要那些記錄與組合框的值匹配的記錄。 是否有一個如果在續集中可以使用的說明? – Zack 2011-04-19 21:12:05

+0

@Zack:我不確定您的問題是否已解決。如果不檢查更新的帖子,特別是第一個查詢對於MS Access。 – Chandu 2011-04-20 15:07:37

1

你不能直接在SQL中使用你的表單參數。動態我假設你正在結合形式的價值窗體名稱組合框參數:您可以參數化查詢,並傳遞一個參數,讓我們稱之爲@FormName:

select 
    case 
     when @FormName is not null then ParentTable.column1 
     else ParentTable.column2 
    end 
from ParentTable 
where ParentTable.column3 = @FormName 
+0

@爲此做了什麼?這是個人的符號還是包含在代碼中? – Zack 2011-04-19 21:03:42

+0

這就是你在sql中編寫參數的方法:'declare @myParam int':http://social.msdn.microsoft.com/Forums/en-US/sqlgetstarted/thread/e8299eb3-5d71-41ec-8459-8c42b868646b/ – Milimetric 2011-04-19 23:09:29

1

好像在這裏不需要CASE:

SELECT ParentTable.Column 
FROM ParentTable 
WHERE (Forms!FormName!ComboBox IS NULL) 
    OR (Forms!FormName!ComboBox = ParentTable.Column)