选择带有连接的前N个

时间:2014-06-23 18:12:44

标签: sql-server

我希望加入2个表,其中包含其他表的前n个结果,如下所述。

OrderHeader

OH_Id        OrderDate
----------------------
1            2014-06-01
2            2014-06-02
3            2014-06-03
4            2014-06-04
5            2014-06-05

OrderProducts

OP_Id        OH_Id    Quantity
------------------------------
1              1       1
2              1       2
3              2       1
4              3       3
5              4       4
6              4       1
7              4       2
8              5       2
9              5       1

我期待前3个订单(4行)的结果类似。

OH_Id        OrderDate       Op_Id      Quantity
------------------------------------------------
1            2014-06-01      1           1
1            2014-06-01      2           2
2            2014-06-02      3           1
3            2014-06-03      4           3

注意:我正在寻找加入2个表而不是写为SP或循环查询。

4 个答案:

答案 0 :(得分:0)

select top 3 o.oh_id, o.orderdate, oo.op_id, oo.quantity
from orderheader o 
join orderproducts oo on o.oh_id = oo.oh_id 

答案 1 :(得分:0)

如果您希望OrderHeader中的前3个订单号与OrderProducts中的所有相应行尝试此操作。

select o.oh_id
    ,o.orderdate
    ,oo.op_id
    ,oo.quantity
from (SELECT TOP 3  * 
      FROM orderheader 
      ORDER BY OH_ID --or Date etc...
     ) o 
INNER JOIN orderproducts oo 
    on o.oh_id = oo.oh_id 

答案 2 :(得分:0)

我认为你的描述令人困惑。你不想要前三名,因为它只会返回3行。你只需要它听起来像是ids 1-3。

SELECT * 
FROM OrderHeader a
JOIN OrderHeader b on a.oh_id = b.oh_id
WHERE a.oh_id <= 3

答案 3 :(得分:0)

你必须使用像这样的子查询

SELECT * FROM OrderHeader 
INNER JOIN OrderProducts ON OrderHeader.OH_Id = OrderProducts.OH_Id
WHERE OrderHeader.OH_Id IN (SELECT TOP 3 OH_Id FROM OrderHeader)

测试sql小提琴是here

希望这会有所帮助