Mar*_*own 0 sql pivot sql-server-2005
我有一个有趣的SQL问题,我需要帮助.
以下是示例数据集:
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
Run Code Online (Sandbox Code Playgroud)
此数据集表示两个仓库之间的库存转移.有两个记录代表每次传输,这两个传输记录总是具有相同的ItemNumber,DateStamp和ID.两个传输记录的TimeStamp值始终为1,其中较小的TimeStamp表示源仓库记录,较大的TimeStamp表示目标仓库记录.
使用上面的示例数据集,这是我需要的查询结果集:
Warehouse_Source Warehouse_Destination ItemNumber DateStamp
A B abc 8/1/2009
C A qrs 8/3/2009
D B xyz 8/5/2009
Run Code Online (Sandbox Code Playgroud)
我可以编写代码来生成所需的结果集,但我想知道这个记录组合是否可以通过SQL实现.我使用SQL Server 2005作为我的底层数据库.我还需要向SQL添加一个WHERE子句,例如,我可以在Warehouse_Source = A上搜索.不,我无法更改数据模型;).
任何意见是极大的赞赏!
问候,马克
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
Run Code Online (Sandbox Code Playgroud)