这是我的 table ,
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 的 [Counter] 插入 X 行数。 它不起作用,因为子查询返回了超过 1 个值。
如何修复 TOP() 中的查询?
最佳答案
您可以使用窗口函数按客户对行进行排名,然后按计数器进行过滤:
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;
您需要为每个客户选择一个 ORDER 以确定包含“哪些”TOP 记录(我假设您想要此处的最高金额)
我还使用 SELECT ... INTO
即时创建表 3,但如果它已经创建,您可以 INSERT INTO
。
关于sql - 如何插入 Select every with TOP() 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23670233/