2012-11-25 57 views
1

模式和實施例的數據鏈接基於數據輸出兩行數據/在

下面是一些示例數據,以顯示該表的佈局。在這個例子中,我只顯示特定ITEM和SERIAL的交易。但是,在製作過程中會有其他ITEMS/SERIALS,因此所執行的任何連接都需要在這兩個領域中進行。

transid Item      qty Transdate    Type Serial IssuedTo 
======= =========================== === ======================= ======= ======= ======== 
423371 SUNNENBOREGAGE1.18-2.0-3 1 2012-10-22 08:49:18.000 ISSRT G-02145 742 
422415 SUNNENBOREGAGE1.18-2.0-3 -1 2012-10-17 18:42:08.000 RETN G-02145 139 
422082 SUNNENBOREGAGE1.18-2.0-3 1 2012-10-17 13:21:38.000 REISS G-02145 139 
421518 SUNNENBOREGAGE1.18-2.0-3 1 2012-10-15 13:37:08.000 ISSRT G-02145 709 
421459 SUNNENBOREGAGE1.18-2.0-3 -1 2012-10-15 09:37:41.000 RETN G-02145 640 
421426 SUNNENBOREGAGE1.18-2.0-3 1 2012-10-15 08:02:19.000 ISSRT G-02145 640 
420100 SUNNENBOREGAGE1.18-2.0-3 -1 2012-10-10 06:23:34.000 RETN G-02145 742 
420097 SUNNENBOREGAGE1.18-2.0-3 1 2012-10-10 06:22:21.000 ISSRT G-02145 742 

所有退貨都由RETN或REISS類型標記。所有問題均以ISSRT或REISS類型標記。重發(REISS)既是回報也是問題。 ISSUEDTO字段標記誰收到REISS或ISSRT交易的物品。

所需的結果

總之,我想找到一個日期範圍(季度)和匹配問題交易(無論是發行時的)內的所有收益,這樣我可以識別出員工很以及該員工擁有該特定項目/系列的時間長度(以天計)。

我的最終結果集將有列如下所示:

ITEM SERIAL EMPLOYEE ISSUETRANSID ISSUEDATE RETURNTRANSID RETURNDATE DAYSOUT 

我似乎不能換我圍​​繞如何做到這一點的頭因爲REISS在技術上是兩個事務在一行,並確保每個ISSRT(或REISS)交易僅針對每個RETN(或REISS)交易使用一次。這聽起來很像FIFO/LIFO問題,但我似乎無法應用這裏的邏輯(這可能只是我自己的缺點)。

任何幫助或指針將不勝感激!謝謝=)

+0

什麼ISSRT代表不? – tempidope

+0

通過將實際業務設計與技術問題一起納入考慮範圍,您使該帖子過於冗長且難以理解,因此您將得到很少或根本沒有答案。嘗試將問題簡化爲純粹的技術術語(例如,根據開始/結束日期將多個記錄中的數據鏈接起來)。您還可以添加一個易於理解的簡單通用示例。你會得到更好的迴應。 –

+0

@JKarthik:ISSRT是ReTurnable項目的一個ISSue – Heathro

回答

0

經過更多的研究,我相信我找到了我的問題的答案。使用以下帖子中的信息是我需要的。

SQL Server: How to Join to first row

我的代碼(這是特定的,可能沒有明確符合我的示例數據):

SELECT 
    ReturnedItems.SerialID AS SerialID, 
    ReturnedItems.Item AS R_Item, 
    ReturnedItems.TransNumber AS R_TransNumber, 
    ReturnedItems.TransDate AS R_TransDate, 
    ReturnedItems.TypeDescription AS R_TransDescription, 
    ReturnedItems.IssuedTo AS R_IssuedTo, 
    IssuedItems.TransNumber AS I_TransNumber, 
    IssuedItems.TransDate AS I_TransDate, 
    IssuedItems.TypeDescription AS I_TransDescription, 
    IssuedItems.IssuedTo AS I_IssuedTo, 
    DATEDIFF(HOUR, IssuedItems.TransDate, ReturnedItems.TransDate)/24 AS Days_Out 
FROM 
    CribMaster.dbo.TRANS AS ReturnedItems CROSS APPLY (
     SELECT TOP 1 
      CribMaster.dbo.TRANS.Item AS Item, 
      CribMaster.dbo.TRANS.SerialID AS SerialID, 
      CribMaster.dbo.TRANS.TransNumber AS TransNumber, 
      CribMaster.dbo.TRANS.TransDate AS TransDate, 
      CribMaster.dbo.TRANS.TypeDescription AS TypeDescription, 
      CribMaster.dbo.TRANS.IssuedTo AS IssuedTo 
     FROM 
      CribMaster.dbo.TRANS 
     WHERE 
      CribMaster.dbo.TRANS.SerialID = ReturnedItems.SerialID AND 
      CribMaster.dbo.TRANS.TypeDescription IN ('ISSRT', 'REISS') AND 
      CribMaster.dbo.TRANS.TransDate < ReturnedItems.TransDate 
     ORDER BY 
      CribMaster.dbo.TRANS.TransDate DESC 
    ) AS IssuedItems 
WHERE 
    ReturnedItems.TypeDescription IN ('RETN', 'REISS') AND 
    ReturnedItems.TransDate < '10/1/2012' AND 
    ReturnedItems.TransDate >= '7/1/2012'