Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL表联接并基于查询生成新列_Sql_Oracle - Fatal编程技术网

SQL表联接并基于查询生成新列

SQL表联接并基于查询生成新列,sql,oracle,Sql,Oracle,我有三张桌子 交易 产品 日期 事务表有列 日期id、产品id、支出金额、数量、事务处理fid。 产品表有 产品标识、描述、类别 和日期表 日期,星期。 如果产品在过去4周内售出,我需要将其标记为活动产品,否则为非活动产品 如何进行此操作。如果您离开加入到过去4周内有交易的产品id,那么您可以使用案例作为标志 例如: SELECT p.* , (CASE WHEN wk4.prod_id IS NOT NULL THEN 'Y' ELSE 'N' END) AS isActive FROM Pr

我有三张桌子

交易 产品 日期 事务表有列

日期id、产品id、支出金额、数量、事务处理fid。 产品表有

产品标识、描述、类别 和日期表

日期,星期。 如果产品在过去4周内售出,我需要将其标记为活动产品,否则为非活动产品
如何进行此操作。

如果您离开加入到过去4周内有交易的产品id,那么您可以使用案例作为标志

例如:

SELECT p.*
, (CASE WHEN wk4.prod_id IS NOT NULL THEN 'Y' ELSE 'N' END) AS isActive
FROM Product p
LEFT JOIN (
  SELECT t.prod_id
  FROM Transaction t
  JOIN "date" d ON d.date_id = t.date_id
  WHERE d.week_id >= to_number(to_char(current_date-(7*4), 'YYYYWW'))
  GROUP BY t.prod_id
) wk4 ON wk4.prod_id = p.prod_id

我终于找到了做这件事的方法

SELECT pr.prod_id, (case when count(distinct tr.transaction_fid)>=1 THEN 'Y' ELSE 'N' end) as active_flag
FROM transaction tr
INNER JOIN product pr ON pr.prod_id = tr.prod_id 
INNER JOIN
(
    SELECT date_id, week_id
    FROM date
    WHERE week_id BETWEEN 201815 AND 201818
) d ON d.date_id = tr.date_id
使用EXISTS子句检查产品是否存在日期范围内的事务

select
  p.*
  case when exists
  (
    select *
    from transaction t
    join date d on d.date_id = t.date_id
    where t.prod_id = p.prod_id
    and d.week_id between 201815 and 201818
  ) then 1 else 0 end as is_active
from product p;

在你的桌子上看不到任何日期是很奇怪的。在您的请求中,您要求的是最后四周,当然,如果不知道交易日期,这是不可能的。但是,在您的请求评论中,您说您希望查看201815和201818之间的范围week_id,因此我使用了此选项。

您尝试了什么请解释?什么是周id?请用一些数据解释周id是每周的唯一指标。我尝试的是查找week_id在201815-201818范围内的每种产品的交易\u fid计数。请通过单击下面的链接来回答您的问题,并根据该数据添加一些和预期输出。请你的问题-不要在评论中发布代码或附加信息交易、产品、日期、交易\u fid是4个表…嘿,我发现有一个外键用于链接到日期表,这有点奇怪。更常见的情况是,您只会在表中看到日期/日期时间/时间戳,日历表的日期类型字段上有一个主键。当然,除非在本例中该日期\ id是一个日期,而不是一个INT。您似乎缺少pr.prod\ id的一个组。并且内部联接只显示给定范围内的产品,即active\ U标志='Y',因此您找不到任何其他产品。您将需要一个外部联接。但我无论如何都不会加入。使用EXISTS检查产品的数据范围中是否存在事务。请看我对此的回答。