[英]Return a SQL query where field doesn't contain specific text
我将设置一个快速场景,然后提出一个问题:假设我有一个仓库数据库,其中包含以下字段:StorageBinID,StorageReceivedDT,StorageItem和StorageLocation。
由于单个存储仓中有多个项目,因此它们可能具有多个记录。 因此,我想做的是创建一个查询,该查询仅返回不包含特定项目(但不包含其余内容)的存储仓。 例如,假设我的仓库中有5000个存储箱,并且我知道在StorageItem字段中列出了一些没有“ ItemX”的箱。 我想返回该StorageBinID的简短列表,但不获取所有没有ItemX及其所有内容的垃圾箱的完整列表。 (我认为这排除了IN,LIKE和CONTAIN及其NOTS)
我现在的解决方法是运行两个查询,通常在StorageReceivedDT中。 第一个是带有日期的垃圾箱,第二个是包含ItemX的垃圾箱。 然后将两个.csv文件导入Excel,并使用ISNA(MATCH)公式比较两列。
通过查询可以做到吗? 非常感谢您的任何建议。
您可以使用having
子句作为聚合查询来执行此操作。 只需计算每个bin中出现“ ItemX”的行数,然后选择计数为0
的bin:
select StorageBinID
from table t
group by StorageBinID
having sum(case when StorageItem = "ItemX" then 1 else 0 end) = 0;
请注意,这只会返回其中包含某些项目的垃圾箱。 如果您有完全空的垃圾箱,它们将不会出现在结果中。 您没有提供足够的信息来处理这种情况(尽管我可以推测您具有解决此问题所需的StorageBins
表)。
您使用哪种SQL? 根据您提供的信息,您可以使用:
select distinct StorageBinID
from table_name
where StorageBinID not in (
select StorageBinID
from table_name
where StorageItem like '%ItemX%'
)
您必须用表名替换table_name。 如果只需要完全匹配(StorageItem恰好是“ ItemX”),则应替换条件
where StorageItem like '%ItemX%'
与
where StorageItem = 'ItemX'
另一种选择(应该更快):
select StorageBinID
from table_name
minus
select StorageBinID
from table_name
where StorageItem like '%ItemX%'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.