我在一个表中有9条记录的数据集,即测试数据。 我有下面的数据样本。 在下表中,第一行是标题。
+-------------+-------------+----------+---------------+---------------+
| BehrInvoice | TboInvoice | TboRloc | TboDoc | TboPax |
+-------------+-------------+----------+---------------+---------------+
| 4312 | 1449S | WIUBLF | -0772089627 | ASARCH/CHAD |
| 4313 | 1457S | TAQXKU | XD7366998723 | CARREON JR/L |
| 4314 | 1457S | TAXXKU | -7366998723 | CARREON JR/L |
| 4317 | 1461S | TOXSEH | XD7366998726 | ALVA/MICHAEL |
| 4318 | 1460S | TOXSEH | -7366998726 | ALVA/MICHAEL |
| 4320 | 1458S | ULHHZO | -7366998724 | GREENFIELD/M |
+-------------+-------------+----------+---------------+---------------+
我想做的是能够搜索每一列, 一起。
我希望如果我输入alva
,我会看到
Alva/Michael
记录至少会首先弹出。
或者,如果我在搜索框中输入TboInvoice
,在1458
中输入alva
,
TboPax
搜索框,我将看到所有这三个记录。
我正在尝试使用它:
SELECT *
FROM Main
WHERE ((Main.TboInvo) LIKE [Forms]![SearchForm]![TboInvoice] & "*")
OR ((Main.TboPax) LIKE [Forms]![SearchForm]![PaxName] & "*")
但是结果集随一切返回。 我隔离到TboInvoice,并尝试了此方法:
WHERE ((Main.TboInvo) = [Forms]![SearchForm]![TboInvoice] & "[S]")
它什么也没带回来。
我想我应该只关注TboInvoice
,并使其正常运行。
因此,总的来说,问题是:
如何查询此处的TboInvoice
列并获得更准确的结果?
=== 编辑190906
所以当我放入:
SELECT * FROM Main
WHERE Main.TboPax LIKE "alva*";
效果很好。 当我放入时:
SELECT *
FROM Main
WHERE (((Main.TboPax) Like [Forms]![SearchForm]![PaxName]));
并且[PaxName] ==“ alva”形式的值,我什么也没得到。也许我引用的表格不正确?
答案 0 :(得分:1)
我怀疑您只是想and
:
SELECT *
FROM Main
WHERE (Main.TboInvo LIKE [Forms]![SearchForm]![TboInvoice] & "*") AND
(Main.TboPa LIKE [Forms]![SearchForm]![PaxName] & "*")
如果您使用OR
并将任何一个文本框保留为空,则该文本框的条件将包括所有行。
答案 1 :(得分:0)
您的第一个查询返回所有内容的原因是,如果data=spss.SavReader('file name', returnHeader=True)
df= pd.DataFrame(data)
df.loc[0]=df.loc[0].apply(lambda x: x[2:len(x)-1])
或TboInvoice
这两个文本框中的任何一个为空,则PaxName
将产生[Forms]![SearchForm]![TboInvoice] & "*"
,从而匹配所有记录
考虑到这一点,您将需要在选择标准中包括一个测试,以说明表单控件为空的时间,也许是由于以下原因:
"*"
取决于期望的行为,如果两者表单控件均为空,则您可能希望返回所有记录,这将需要第三个条件,例如:
select * from main
where
(
[Forms]![SearchForm]![TboInvoice] is not null and
main.tboinvo like [Forms]![SearchForm]![TboInvoice] & "*"
) or
(
[Forms]![SearchForm]![PaxName] is not null and
main.tbopax like [Forms]![SearchForm]![PaxName] & "*"
)
也可以这样写:
select * from main
where
(
[Forms]![SearchForm]![TboInvoice] is not null and
main.tboinvo like [Forms]![SearchForm]![TboInvoice] & "*"
) or
(
[Forms]![SearchForm]![PaxName] is not null and
main.tbopax like [Forms]![SearchForm]![PaxName] & "*"
) or
(
[Forms]![SearchForm]![TboInvoice] is null and
[Forms]![SearchForm]![PaxName] is null
)
注意到select * from main
where
(
[Forms]![SearchForm]![TboInvoice] is null or
main.tboinvo like [Forms]![SearchForm]![TboInvoice] & "*"
) and
(
[Forms]![SearchForm]![PaxName] is null or
main.tbopax like [Forms]![SearchForm]![PaxName] & "*"
)
会产生Null & "*"
,这可能变成:
"*"