栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

需要T-SQL查询找到所有可能的方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

需要T-SQL查询找到所有可能的方法

这是硬编码的,几乎没有灵活性。我的系统花了2分钟才能运行。但是可能会有所帮助,如果没有,抱歉。fnGenerate_Numbers是一个表函数,它返回参数范围内的整数。
做到这一点的方法。

DECLARE @Max INT,        @Pens money,        @Dvds money,        @Pendrives money,        @Mouses money,        @Tvs moneySELECt @Max = 1000,       @Pens = 10,       @Dvds = 29,       @Pendrives = 45,       @Mouses = 12.5,       @Tvs = 49;WITH Results AS(    SELECT p.n pens, d.n dvds, pd.n pendrives, m.n mouses, t.n tvs, tot.cost    FROM fnGenerate_Numbers(0, @Max/@Pens) p -- Pens        CROSS JOIN fnGenerate_Numbers(0, @Max/@Dvds) d -- DVDs        CROSS JOIN fnGenerate_Numbers(0, @Max/@Pendrives) pd -- Pendrives        CROSS JOIN fnGenerate_Numbers(0, @Max/@Mouses) m -- Mouses        CROSS JOIN fnGenerate_Numbers(0, @Max/@Tvs) t -- Tvs        CROSS APPLY (SELECt p.n * @Pens + d.n * @Dvds + pd.n * + @Pendrives + m.n * @Mouses + t.n * @Tvs cost) tot    WHERe tot.cost < @Max), MaxResults AS(    SELECT         MAX(pens) pens,        dvds,        pendrives,        mouses,        tvs    FROM Results    GROUP BY        dvds,        pendrives,        mouses,        tvs)SELECt mr.*, r.cost FROM MaxResults mr    INNER JOIN Results r ON mr.pens = r.pens         AND mr.dvds = r.dvds        AND mr.pendrives = r.pendrives        AND mr.mouses = r.mouses        AND mr.tvs = r.tvsORDER BY cost


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/614397.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号