【问题标题】:Updating data to integrate it in my datawarehouse更新数据以将其集成到我的数据仓库中
【发布时间】:2019-09-01 14:29:08
【问题描述】:

我收到一位客户的销售数据,并将其集成到他的数据仓库中。通常有两列来定义销售行 - num_transcationnum_line_transaction。但是我收到了很多具有相同num_transcationnum_line_transaction 的行,所以当我执行这个查询时:

select * 
from 
    (select 
         ROW_NUMBER() over(partition by ll_vente_num_transaction, ll_vente_num_ligne_transaction 
                           order by ll_vente_num_transaction) rn, * 
     from my_table) t
where 
    rn > 2 

我得到了几乎 43000 行具有相同标识(num_transcationnum_line_transaction)的行,唯一不同的是销售日期。

我需要一种方法来更新“num_line_transaction”以便能够加载数据仓库中的数据,否则它将只加载每个“num_transcation”和“num_line_transaction”组合的一行。

例如:

+-----------------+-----------------------+
| NUM_TRANSACTION | NUM_LIGNE_TRANSACTION |
+-----------------+-----------------------+
|       106969796 |               3148291 |
|       106969796 |               3148291 |
|       106969796 |               3148291 |
|       106969796 |               3148291 |
|       106969796 |               3148291 |
|       106969796 |               3148291 |
|       106969796 |               3148291 |
+-----------------+-----------------------+

我需要将这些行更新为:

+-----------------+-------------------------+
| NUM_TRANSACTION |   NUM_LIGNE_TRANSACTION |
+-----------------+-------------------------+
|       106969796 |                 3148291 |
|       106969796 |                 3148292 |
|       106969796 |                 3148293 |
|       106969796 |                 3148294 |
|       106969796 |                 3148295 |
|       106969796 |                 3148296 |
|       106969796 |                 3148297 |
+-----------------+-------------------------+

请,任何想法将不胜感激。我被困在这里了。

【问题讨论】:

  • @Dan Guzman 你确定将NUM_LIGNE_TRANSACTION 分成两列的编辑吗?
  • opps,这是一个错误点击,它们应该在 NUM_LIGNE_TRANSACTION 中
  • @yassinesaddi,请检查我的编辑以确保数据正确并根据需要进行修复。
  • @BarbarosÖzhan,感谢您的收获。标签在原文中不一致,我忽略了清理它。

标签: sql sql-server tsql sql-update ssis-2008


【解决方案1】:

如果您有区别(如您提到的 sales_date 等唯一列),以下语句将有所帮助:

with t2 as
(
select t.*,
       row_number() over (partition by num_transaction order by num_ligne_transaction)+
       num_ligne_transaction - 1
        as rn 
 from tab t
)
update t1
   set t1.num_ligne_transaction = t2.rn
  from tab t1
  join t2
    on t1.num_transaction = t1.num_transaction
   and t1.sales_date = t2.sales_date;

Demo

【讨论】:

  • 非常感谢,我不得不更改 join 子句,但这对我帮助很大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
  • 2010-12-08
  • 1970-01-01
相关资源
最近更新 更多