SQL Server从Openquery获取按本地查询过滤的数据

时间:2019-07-11 13:13:52

标签: sql-server

这是我的openquery

SELECT * 
FROM OPENQUERY(LinkedServer, 'SELECT 
                                  A.Reference, 
                                  B.Ticket, B.Localization
                              FROM References AS A
                              LEFT JOIN Tickets B ON B.Reference = A.Reference')

我需要限制每个参考有多少张票。我在本地查询中有这个号码

SELECT 
    Reference,
    QTYBoxes 
FROM 
    Supplies

门票数量基本上等于盒子数量。

我需要一种方法来连接两个表,并以某种方式说count(tickets)= Boxs,但是我不知道如何在打开的查询中执行此操作。

另一种选择是将数据从OpenQuery获取到临时表中,我可以在其中进行联接和限制,这很简单,问题是我为此查询了数千个结果。

这是更新的查询,我现在只需每个参考即可获得n张门票

SELECT * 
FROM OPENQUERY(LinkedServer,
       'SELECT 
             A.Reference, 
             B.Ticket, 
             B.Localization
       FROM References AS A
       LEFT JOIN Tickets B ON B.Reference = A.Reference') A
RIGHT JOIN Supplies B
ON A.Reference = B.Reference
// Must have n Tickets per reference = B.Boxes

编辑

我忘了添加,实际结果应该是按票证升序排列的每个引用X行

以下是预期结果的示例

Reference  |  Ticket   | Boxes
  M100     |    1      |   1
  M200     |    2      |   2
  M200     |    3      |   2
  M300     |    5      |   3
  M300     |    6      |   3
  M300     |    7      |   3

1 个答案:

答案 0 :(得分:1)

根据Microsoft

  可以在查询的FROM子句中引用

OPENQUERY,就像它是表名一样。

因此,您可以这样编写查询:

SELECT 
   S. Reference,
   S. QTYBoxes 
FROM OPENQUERY(LinkedServer, 
    'SELECT 
        A.Reference, 
        B.Ticket, B.Localization
     FROM References AS A
        LEFT JOIN Tickets B ON B.Reference = A.Reference') 
AS C --alias your openquery result like it is just another table
  INNER JOIN Supplies S ON C.Reference = S.Reference