如何插入使用TOP()子句选择每个

时间:2014-05-15 05:50:12

标签: sql tsql

这些是我的表,

http://sqlfiddle.com/#!3/a8087/1

我想要实现的是通过选择Tbl2和CustTable插入另一个新表。

例如:

INSERT INTO tbl3
SELECT TOP(SELECT Counter FROM Tbl2) a.name, a.amount FROM custTable a
INNER JOIN Tbl2 b ON a.custId = b.custid

我想在CustId' s [Counter]上插入X编号的ROW。 由于Subquery返回的值超过1,因此无法正常工作。

如何在TOP()中修复查询?

1 个答案:

答案 0 :(得分:3)

您可以使用窗口函数按客户对行进行排名,然后按计数器过滤:

WITH cte as
(
  SELECT a.Name, a.Amount, b.Counter, 
   ROW_NUMBER() OVER (PARTITION BY a.CustID ORDER BY a.Amount DESC) AS RN
  FROM custTable a
  INNER JOIN Tbl2 b ON a.custId = b.custid  
)
SELECT cte.name, cte.amount 
INTO tbl3
FROM cte
WHERE cte.rn <= Counter;

您需要为每个客户选择一个订单,以确定哪个&#39;哪个&#39; TOP记录包括在内(我假设你想要最高金额)

我还使用SELECT ... INTO即时创建了表格3,但如果已经创建了表格,则可以INSERT INTO

Updated your SqlFiddle here