Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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,我有一个SKU列表,它们只在单独的表中。我需要找到包含POD SKU的交易,以及包含POD SKU和其他SKU的交易 我附上了一个我创建的示例数据库 这是这些表中的数据: select * from transaction_detail_mv; INDIVIDUAL_ID DOLLAR_VALUE_US QUANTITY TRANSACTION_NUMBER SKU TXN_DATE BRAND IS_MERCH CURRE L ------------- ----

我有一个SKU列表,它们只在单独的表中。我需要找到包含POD SKU的交易,以及包含POD SKU和其他SKU的交易

我附上了一个我创建的示例数据库

这是这些表中的数据:

select * from transaction_detail_mv;

INDIVIDUAL_ID DOLLAR_VALUE_US   QUANTITY TRANSACTION_NUMBER SKU        TXN_DATE   BRAND   IS_MERCH CURRE L
------------- --------------- ---------- ------------------ ---------- ---------- ----- ---------- ----- -
            1              10         30                567 903633     2019-02-01 BRAND          1 USD   S
            1              20         30                567 123767     2019-02-01 BRAND          1 USD   S
            1              10         40                345 773633     2019-02-10 BRAND          1 USD   S
            1              12         30                345 965322     2019-02-10 BRAND          1 USD   S
            1              10         50                678 838364     2019-02-15 BRAND          1 USD   S
            1              10         70                975 983636     2019-02-28 BRAND          1 USD   S
            2              11         80                910 363635     2019-02-11 BRAND          1 USD   S
            2              11         90                323 566373     2019-02-12 BRAND          1 USD   S
            3              11         62                855 678364     2019-02-12 BRAND          1 USD   S
例如,交易编号567和345将是拆分交易,因为它们在同一交易中都有一个POD SKU以及一些其他SKU。事务975和855将是单个事务,因为它们只有POD SKU

这是我正在寻找的格式:

您可以在表之间使用外部联接来包括POD和非POD SKU,然后使用案例表达式和可能的分析(窗口)函数来比较同一事务的行;例如:

select td.transaction_number, td.sku,
  case when ps.sku is not null
       then 'Yes'
       else 'No'
  end as is_pod_sku,
  case when count(ps.sku) over (partition by td.transaction_number) > 0
       then 'Yes'
       else 'No'
  end as has_pod_sku,
  case when count(ps.sku) over (partition by td.transaction_number) > 0
       and  count(ps.sku) over (partition by td.transaction_number)
              < count(*) over (partition by td.transaction_number)
       then 'Yes'
       else 'No'
  end as is_split
from transaction_detail_mv td
left join pod_sku ps on ps.sku = td.sku;

TRANSACTION_NUMBER SKU        IS_POD_SKU HAS_POD_SKU IS_SPLIT
------------------ ---------- ---------- ----------- --------
               323 566373     No         No          No      
               345 773633     Yes        Yes         Yes     
               345 965322     No         Yes         Yes     
               567 123767     No         Yes         Yes     
               567 903633     Yes        Yes         Yes     
               678 838364     Yes        Yes         No      
               855 678364     Yes        Yes         No      
               910 363635     No         No          No      
               975 983636     No         No          No      
或者更简单地说:

select count(case when sku_count > pod_sku_count then transaction_number end) as split,
  count(case when sku_count = pod_sku_count then transaction_number end) as single
from (
  select td.transaction_number,
    count(*) as sku_count,
    count(ps.sku) as pod_sku_count
  from transaction_detail_mv td
  left join pod_sku ps on ps.sku = td.sku
  group by td.transaction_number
)
where pod_sku_count > 0;

     SPLIT     SINGLE
---------- ----------
         2          2

添加了这两个查询。

您已经做了多少(是否有一个部分有效的查询可以添加到问题中)?你想要什么样的输出?你真的认为975是拆分的,因为它根本没有POD SKU吗?也许你是指678和855?是的,没错。此外,我也无法找到一种方法以计数的形式显示它们。有没有一种方法可以对它们进行计数并以以下格式给出结果:拆分事务-(计数)单个事务-(计数)好吧,您可以将我显示的查询用作子查询(内联视图或CTE)并计算有多少个
被拆分为是,有多少个
被拆分为否?但这就是你想要知道的——不是涉及到哪些交易或其他任何事情吗?这是可行的,但我试图为每个交易添加数量,但它没有给我任何东西。如果你在问题中包含你真正想要的输出,它仍然会真的有帮助。我不知道你的最后两个评论是如何结合在一起的;第一个说你想要交易的总计数,第二个说你想要计数——什么?对于每笔交易。但是每一笔交易不是拆分就是不拆分,所以我不知道你是怎么做到的。我只需要拆分和单个交易的数量,我还需要它们数量的总和
select count(distinct case when is_split = 'Yes' then transaction_number end) as split,
  count(distinct case when is_split = 'No' then transaction_number end) as single
from (
  select td.transaction_number, td.sku,
    case when count(ps.sku) over (partition by td.transaction_number) > 0
         then 'Yes'
         else 'No'
    end as has_pod_sku,
    case when count(ps.sku) over (partition by td.transaction_number) > 0
         and  count(ps.sku) over (partition by td.transaction_number)
                < count(*) over (partition by td.transaction_number)
         then 'Yes'
         else 'No'
    end as is_split
  from transaction_detail_mv td
  left join pod_sku ps on ps.sku = td.sku
)
where has_pod_sku = 'Yes';

     SPLIT     SINGLE
---------- ----------
         2          2
select count(case when sku_count > pod_sku_count then transaction_number end) as split,
  count(case when sku_count = pod_sku_count then transaction_number end) as single
from (
  select td.transaction_number,
    count(*) as sku_count,
    count(ps.sku) as pod_sku_count
  from transaction_detail_mv td
  left join pod_sku ps on ps.sku = td.sku
  group by td.transaction_number
)
where pod_sku_count > 0;

     SPLIT     SINGLE
---------- ----------
         2          2