【发布时间】:2020-06-17 21:01:15
【问题描述】:
对 SQL 有点陌生,在网上做了一些搜索,但找不到答案。
SQL 数据库是 Snowflake 数据库,我相信它是 ANSI 数据库。
我有一个如下所述的事实表。相同问题/UPC/仓库/日期的组合是可能的,因为每当报告新问题时都会添加新记录。
排除列是我想要弄清楚的——如果问题/UPC/仓库和日期的组合在排除表中,它应该是“Y”,如下所示。
棘手的部分是数据是在个别日期级别,但如果它在范围内,我想排除它。
因此,此处仅应排除 I-100/1234/China/5-5-2019 和 I-324/1349/NewYork/6-1-2019,因为它们与排除表中的值和日期范围相匹配。
我尝试了以下查询,但 DATES BETWEEN 的 SELECT 返回了超过 1 条记录,并给了我这个错误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/问题/仓库的组合排除“级别”。仓库是最具体的,如果只是 UPC,它涵盖的数据最多。
【问题讨论】:
-
用您正在使用的数据库标记您的问题。
标签: sql conditional-statements snowflake-cloud-data-platform between ansi