English 中文(简体)
助手——将两个网络合并为一体
原标题:Help With SQL - Combining Two Rows Into One Row
  • 时间:2009-09-01 22:49:10
  •  标签:

我有一个有趣的问题,我需要帮助。

这里是抽样数据集:

Warehouse  DateStamp   TimeStamp  ItemNumber  ID
    A       8/1/2009    10001         abc      1
    B       8/1/2009    10002         abc      1 
    A       8/3/2009    12144         qrs      5
    C       8/3/2009    12143         qrs      5
    D       8/5/2009    6754          xyz      6
    B       8/5/2009    6755          xyz      6

这一数据集表明两个仓库之间的库存转移。 每次转让都有两个记录,这两个转让记录总是有相同的项目编号、日期和ID。 两个转让记录的时间序列值始终存在1个差异,其中较小的时间序列代表来源仓库记录,较大的时间序列代表目的地仓库记录。

采用上述抽样数据集,这里是问答结果,我需要:

Warehouse_Source  Warehouse_Destination  ItemNumber  DateStamp
    A                B                      abc       8/1/2009
    C                A                      qrs       8/3/2009
    D                B                      xyz       8/5/2009   

我可以写成法典,以产生预期结果,但我很想知道,这一记录是否可以通过QQ。 我将2005年服务器作为我的基本数据库。 我还需要在Kall增加一个WHERE条款,例如,我可以在仓库——Source = A上搜寻。 无,我可以改变数据模式......。

任何建议都受到高度赞赏。

Regards, Mark

最佳回答
SELECT source.Warehouse as Warehouse_Source 
, dest.Warehouse as Warehouse_Destination
, source.ItemNumber
, source.DateStamp
FROM table source
JOIN table dest ON source.ID = dest.ID 
  AND source.ItemNumber = dest.ItemNumber
  AND source.DateStamp = dest.DateStamp
  AND source.TimeStamp = dest.TimeStamp + 1
问题回答

标记

在这里,你可以如何以人数和购买力平价来做到这一点。 如我所建议的那样,如果在栏目上有组别的指数或主要钥匙,它将使用直线的盘点计划,而不进行ort动,因此效率特别高。

create table T(
  Warehouse char,
  DateStamp datetime,
  TimeStamp int,
  ItemNumber varchar(10),
  ID int,
  primary key(ItemNumber,DateStamp,ID,TimeStamp)
);
insert into T values ( A , 20090801 , 10001 , abc , 1 );
insert into T values ( B , 20090801 , 10002 , abc , 1 ); 
insert into T values ( A , 20090803 , 12144 , qrs , 5 );
insert into T values ( C , 20090803 , 12143 , qrs , 5 );
insert into T values ( D , 20090805 , 6754 , xyz , 6 );
insert into T values ( B , 20090805 , 6755 , xyz , 6 );

with Tpaired(Warehouse,DateStamp,TimeStamp,ItemNumber,ID,rk) as (
  select
    Warehouse,DateStamp,TimeStamp,ItemNumber,ID,
    row_number() over (
      partition by ItemNumber,DateStamp,ID
      order by TimeStamp
    )
  from T
)
  select
    max([1]) as Warehouse_Source,
    max([2]) as Warehouse_Destination,
    ItemNumber,
    DateStamp
  from Tpaired
  pivot (
    max(Warehouse) for rk in ([1],[2])
  ) as P
  group by ItemNumber, DateStamp, ID;
go

drop table T;




相关问题
热门标签