我在访问2007数据库中编写了这个查询:
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和NOME研究领域提供了一个输入框。
我需要,如果用户没有写任何内容(按ENTER),该字段研究标记是。(该字段的所有值)。
ES。如果用户编写COGNOME而不是NOME(在弹出的NOME窗口时按ENTER键),那么在所有NOME上使用“COGNOME”进行研究。
我该怎么做?
答案 0 :(得分:2)
如果我正确理解了这个问题,我想你想要这样的东西......
WHERE
(
Clienti.Cognome=[Cognome: ]
OR [Cognome: ] Is Null
)
AND
(
Clienti.Nome=[Nome: ]
OR [Nome: ] Is Null
)
当参数值为Null时,不会根据相应的字段执行过滤。但是当参数值不是Null时,它将用于过滤结果集,使其仅包含具有匹配值的行。
答案 1 :(得分:2)
对于使用Access本身执行的查询,您可以使用Nz()
函数和LIKE
运算符。例如,查询
PARAMETERS [LastName: ] TEXT(255);
SELECT ID, LastName, FirstName
FROM Clients
WHERE LastName LIKE Nz([LastName: ],"*")
如果在LastName:
提示符下输入任何内容,将返回所有记录 * ,但如果我在提示符处输入内容,则仅返回具有指定[LastName]的记录。
* 实际上,所有记录的LastName都存在(即,IS NOT NULL)。感谢HansUp的纠正。