【发布时间】:2020-10-02 10:53:01
【问题描述】:
我的表格中的数据类似于以下数据集。
我想得到一组价格总和小于 10000 的物品。
CREATE TABLE Table1
(slno int, item varchar(10), price int);
INSERT INTO Table1
(slno, item, price)
VALUES
(1, 'item1', 1000),
(2, 'item2', 2000),
(3, 'item3', 3000),
(4, 'item4', 4000),
(5, 'item5', 5000),
(6, 'item6', 6000),
(7, 'item7', 10000),
(8, 'item8', 2000),
(9, 'item9', 8000),
(10, 'item10', 2500),
(11, 'item11', 9000),
(12, 'item12', 1000),
(13, 'item13', 2500),
(14, 'item14', 2500),
(15, 'item15', 2500);
我的 sql 查询如下所示:
SELECT slno, item,price
FROM
(
SELECT slno, item,price
(
SELECT SUM(price)
FROM Table1
WHERE slno<= t.slno
) total
FROM Table1 t
) q
WHERE total <= 1000
ORDER BY item
但它没有给出预期的结果,它只给出了一组记录:
(1, 'item1', 1000),
(2, 'item2', 2000),
(3, 'item3', 3000),
(4, 'item4', 4000)
而我需要它来给我这样的东西:
1ST SET
(1, 'item1', 1000),
(2, 'item2', 2000),
(3, 'item3', 3000),
(4, 'item4', 4000)
2ND SET
(7, 'item7', 10000),
@GordonLinoff
【问题讨论】:
-
您需要命名
SUM(price)列,并在条件中使用该名称。 (或切换到 HAVING。) -
查询返回一个结果集,而不是多个。您正在询问如何生成总和尽可能接近 10K 的记录组合。这不是微不足道的。这称为knapsack problem
标签: sql sql-server azure-sql-database