对sql有点陌生,在网上做了一些搜索,但找不到答案。
sql数据库是一个雪花数据库,我相信它是一个ansi数据库。
我有一个事实表概述如下。由于每次报告新问题时都会添加新记录,因此可以将相同的问题/upc/仓库/日期组合在一起。
exclude列就是我想弄清楚的—如果issue/upc/warehouse和date的组合在exclude表中,它应该是y,如下所示。
棘手的是,数据是在一天的水平,但我想排除它,如果它在范围之内。
因此,只有i-100/1234/china/5-5-2019和i-324/1349/newyork/6-1-2019应排除在外,因为它们与排除表中的值和日期范围匹配。
我尝试了下面的查询,但select for dates between返回了多条记录,并出现此错误 Single-row subquery returns more than one row.
```
update "FactDetails"
set "EXCLUDE" = 'Y'
where ("UPC","Warehouse", "Issue") in
("UPC","Warehouse", "Issue" from "Exclusions"
where "PLANT_NUMBER" is not null
and "ISSUE_CODE" is not null)
and "Date" between
(select "DATE_FROM" from "Exclusion"
where "PLANT_NUMBER" is not null
and "ISSUE_CODE" is not null) and
(select "DATE_TO" from "Exclusion"
where "PLANT_NUMBER" is not null
and "ISSUE_CODE" is not null);
另一个复杂性是,排除表可以通过upc/issue/warehouse的组合排除“levels”。仓库是最具体的,如果只是upc,它涵盖了最多的数据。
![](https://i.stack.imgur.com/EcZOr.png)
1条答案
按热度按时间gmxoilav1#
如果我理解正确,你可以用
exists
: