2013-11-20 43 views
1

我在Access 2007數據庫編寫這個查詢:SQL查詢,選擇所有值,當沒有輸入

SELECT Ordini.ID, Ordini.Data, Clienti.Cognome, Clienti.Nome, 
     DettagliOrdine.IDProdotto, 
     Prodotti.Descrizione, Prodotti.Prezzo, DettagliOrdine.Quantità, 
     ([Prezzo]*[Quantità]) AS Totale, Ordini.Note, Produttori.Nome, Ordini.Ordinato, 
     Ordini.Arrivato, Ordini.Ritirato 
FROM Produttori 
    INNER JOIN (Prodotti 
     INNER JOIN ((Clienti INNER JOIN Ordini ON Clienti.ID = Ordini.IDCliente) 
     INNER JOIN DettagliOrdine ON Ordini.ID = DettagliOrdine.IDOrdine) 
      ON Prodotti.ID = DettagliOrdine.IDProdotto) 
    ON Produttori.ID = Prodotti.IDFornitore 
WHERE (((Clienti.Cognome)=[Cognome: ]) 
    AND ((Clienti.Nome)=[Nome: ]) 
    AND (([Cognome: ]) Is Not Null)) 
ORDER BY Ordini.Data; 

該查詢帶來了用於研究的COGNOME和諾姆領域的輸入框。

我需要,如果用戶什麼也沒寫(按ENTER鍵)該字段的研究標籤是(該字段的所有值)。

es。如果用戶編寫一個COGNOME而不是NOME(在彈出NOME窗口時按下ENTER)研究將在所有NOME上用「COGNOME」完成。

我該怎麼做?

回答

2

如果我理解正確的問題,我想你想這樣的事情...

WHERE 
    (
     Clienti.Cognome=[Cognome: ] 
     OR [Cognome: ] Is Null 
    ) 
    AND 
    (
     Clienti.Nome=[Nome: ] 
     OR [Nome: ] Is Null 
    ) 

當參數值是零,沒有過濾基於相應的字段進行的。但是,當參數值不爲空時,它將用於過濾結果集,以便它僅包含具有匹配值的行。

+0

我該怎麼做? – Domenico

+1

用我建議的版本替換查詢中的WHERE子句。 – HansUp

+0

工作!非常感謝你! – Domenico

2

對於使用Access本身執行的查詢,可以使用Nz()函數和LIKE運算符。例如,查詢

PARAMETERS [LastName: ] TEXT(255); 
SELECT ID, LastName, FirstName 
FROM Clients 
WHERE LastName LIKE Nz([LastName: ],"*") 

將返回所有記錄*如果輸入任何在LastName:提示,但只能與指定的[姓氏]返回記錄,如果我在提示符下鍵入的東西。

*實際上,姓氏存在的所有記錄(即IS NOT NULL)。感謝HansUp進行更正。

+1

'WHERE LastName LIKE「*」'排除了'LastName'爲空的行......這可能是Domenico實際需要的,但我認爲他的意思是* all *行。 – HansUp

+2

@HansUp啊哈,好點。 Pesky'Null's .... –

+0

對不起,但不工作..如果我在彈出窗口中寫入某些東西,請不要選擇正確的請求,請選擇總是全部......我該怎麼辦? – Domenico