仅在第一次出现的字段时加入另一个表

时间:2014-05-14 15:14:32

标签: sql sql-server sql-server-2012

注意:我已经尝试简化以下内容,使我和其他任何人都能理解它更简单,我在下面引用的表实际上是从不同来源将大量不同数据连接在一起的子查询)

我有一张购买物品的表格:

ItemSaleID CustomerID  ItemCode
1          100         A
2          100         B
3          100         C
4          200         A
5          200         C

我还有来自系统的事务标题和详细信息表:

TranDetail

TranDetailID  TranHeaderID  ItemSaleID  Cost
11            51            1           $10
12            51            2           $10
13            51            3           $10
14            52            4           $20
15            52            5           $10

TranHeader

TranHeaderID  CustomerID Payment Time
51            100        $100    11:00
52            200        $50     12:00
53            100        $20     13:00

我希望得到一个像我这样的表的地方:

ItemSaleID CustomerID  ItemCode   Cost   Payment Time
1          100         A          $10    $120    11:00
2          100         B          $10            11:00
3          100         C          $10            11:00
4          200         D          $20    $50     12:00
5          200         E          $10            12:00

我有一个产生结果的查询但是当我添加ROW_NUMBER() case语句时,从2分钟到30多分钟。

查询进一步混淆,因为我需要提供与交易清单和支付的总价格相关的最早日期(可能是全天的许多交易进行升级等)

以下查询:

SELECT ItemSaleID
     , CustomerID
     , ItemCode
     , Cost 
     , CASE WHEN ROW_NUMBER() OVER (PARTITION BY TranHeaderID ORDER BY ItemSaleID) = 1
            THEN TRN.Payment ELSE NULL END AS Payment

FROM Items I

OUTER APPLY (
             SELECT TOP 1 SUB.Payment, Time
             FROM TranHeader H
             INNER JOIN TranDetail D ON H.TranHeaderID = D.TranHeaderID

             OUTER APPLY (SELECT SUM(Payment) AS Payment
                          FROM TranHeader H2
                          WHERE H2.CustomerID = Items.CustomerID
                         ) SUB

             WHERE D.CustomerID = I.CustomerID


            ) TRN

WHERE ...

我是否只能在保持性能的同时显示每次出现的客户ID付款

0 个答案:

没有答案