比如有个表,里面是商品名称和价格。比如商品A,价格10.5元;商品B,价格7.3元等等等等。大概有2千多种商品,各有不同的价格。现在想实现这一的功能:输入一个金额,比如(100元),系统自动给你查询出能配成100元的商品名称和数量。比如商品A,4个;商品B 2个,商品C 6个……使得这些商品加起来刚好等于100元。

解决方案 »

  1.   

    我加班干活呢,这两天活紧,T-MAC来了让他写
      

  2.   

    http://topic.csdn.net/u/20090804/09/C1ECFA8E-682C-4F7E-86A2-8C8C3C5076DB.html15楼
      

  3.   

    我先写个半成品供参考吧,15L大大那个的选项是固定的就4个,和这个好像还不大一样IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
    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
    */
      

  4.   


    ---这要考虑到排列组合问题,我认为这是SQL无法做到的!
      

  5.   

    我看到 xiequan2 的推荐,感觉是可以做到的。但是应该还有更好的办法。
      

  6.   

    这个INSIDE SQL微软系列丛书2005里的存储引擎还是T-SQL查询哪本里有房间座位和人数匹配的算法。可以参考下。
    作者用的游标。