比如有个表,里面是商品名称和价格。比如商品A,价格10.5元;商品B,价格7.3元等等等等。大概有2千多种商品,各有不同的价格。现在想实现这一的功能:输入一个金额,比如(100元),系统自动给你查询出能配成100元的商品名称和数量。比如商品A,4个;商品B 2个,商品C 6个……使得这些商品加起来刚好等于100元。
解决方案 »
- 如何得到这样的数据
- 如何对数据库进行全文搜索?
- 在笔记本电脑安装SQL出现错误: command line option syntax error!type command /? for help
- 大家看一下 exec gp_WriteValdateNum_Pro;1 '55|1551@455', '554' 中的";1"是什么意思?谁知道?
- 本地 查询分析器 如何能连接远端SERVER?
- 求一sql语句
- where are you in my love :)<>(:
- 请问如何用SQL语句删除SQLSERVER数据库中的多条重复记录。
- 关于触发器deleted,inserted表
- 不懂SQL的请教个问题。
- sql连接不到服务器啊!!!!!!!!
- 查询语句中的判断?
GO
CREATE TABLE TB(ID INT,PRICE NUMERIC(19,2))
INSERT INTO TB
SELECT 1,10 UNION ALL
SELECT 2,20 UNION ALL
SELECT 3,30 UNION ALL
SELECT 4,40 UNION ALL
SELECT 5,50 UNION ALL
SELECT 6,60 UNION ALL
SELECT 7,70 UNION ALL
SELECT 8,80 UNION ALL
SELECT 9,90 UNION ALL
SELECT 10,100 UNION ALL
SELECT 11,110
DECLARE @MONEY AS NUMERIC(19,2)
SELECT @MONEY=100
;WITH MU AS (
SELECT ID,PRICE,PRICE AS NPRICE,1 AS QTY
FROM TB
WHERE PRICE<=@MONEY)
,MU2 AS (
SELECT ID,PRICE,CONVERT(NUMERIC(19,2),PRICE*2) AS 'NPRICE',2 AS 'QTY' FROM MU
WHERE PRICE*2<=@MONEY
UNION ALL
SELECT ID,PRICE,CONVERT(NUMERIC(19,2),PRICE+NPRICE) AS 'NPRICE',QTY+1 FROM MU2
WHERE PRICE+NPRICE<=@MONEY
)
,MU3 AS (
SELECT * FROM MU
UNION ALL
SELECT * FROM MU2)SELECT * FROM MU3 ORDER BY NPRICE
--这里列出了所有商品可能出现的数量,再循环求合计就行了/*
1 10.00 10.00 1
2 20.00 20.00 1
1 10.00 20.00 2
3 30.00 30.00 1
1 10.00 30.00 3
1 10.00 40.00 4
4 40.00 40.00 1
2 20.00 40.00 2
5 50.00 50.00 1
1 10.00 50.00 5
1 10.00 60.00 6
6 60.00 60.00 1
3 30.00 60.00 2
2 20.00 60.00 3
7 70.00 70.00 1
1 10.00 70.00 7
1 10.00 80.00 8
8 80.00 80.00 1
2 20.00 80.00 4
4 40.00 80.00 2
3 30.00 90.00 3
9 90.00 90.00 1
1 10.00 90.00 9
1 10.00 100.00 10
10 100.00 100.00 1
2 20.00 100.00 5
5 50.00 100.00 2
*/
---这要考虑到排列组合问题,我认为这是SQL无法做到的!
作者用的游标。