22,209
社区成员
发帖
与我相关
我的任务
分享
DECLARE @组合价 MONEY=30,@LoopCounted TINYINT=3
;WITH D AS(
SELECT * FROM(VALUES
(1, 0.1),
(2, 0.5),
(3, 0.5),
(4, 0.5),
(5, 1),
(6, 1),
(7, 1),
(8, 2),
(9, 2),
(10, 2),
(11, 5),
(12, 5),
(13, 5),
(14, 10),
(15, 10),
(16, 10),
(17, 20),
(18, 20),
(19, 20),
(20, 50),
(21, 50),
(22, 50),
(23, 100),
(24, 100),
(25, 100)
) D(商品名称, 零售价 )
),
Q AS(
SELECT D.*,
CONVERT(nvarchar(max), RTRIM(D.商品名称)) AS 商品组合,
CONVERT(decimal(18,2),30.00- D.零售价) AS 组合价,
D.商品名称 as 最后组合商品,
@LoopCounted-1 AS LoopCounted
FROM D
WHERE D.零售价 <= 30.00
UNION ALL
SELECT D.*,
Q.商品组合 + ', ' + RTRIM(D.商品名称) AS 商品组合,
CONVERT(decimal(18,2),组合价-D.零售价) AS 组合价,
D.商品名称 as 最后组合商品,
LoopCounted=Q.LoopCounted-1
FROM D, Q
WHERE Q.组合价 >0 AND D.零售价>=Q.零售价 AND Q.LoopCounted>0
)
SELECT * FROM Q WHERE 组合价 = 0
Q AS(
SELECT DATA.*,
CONVERT(nvarchar(max), RTRIM(DATA.商品名称)) AS 商品组合,
CONVERT(decimal(18,2),30.00- DATA.零售价) AS 组合价,
DATA.商品名称 as 最后组合商品
FROM DATA
WHERE DATA.零售价 <= 30
UNION ALL
SELECT DATA.*,
Q.商品组合 + ', ' + RTRIM(DATA.商品名称) AS 商品组合,
CONVERT(decimal(18,2),组合价 -DATA.零售价) AS 组合价,
DATA.商品名称 as 最后组合商品
FROM DATA, Q
WHERE Q.组合价 -DATA.零售价 >= 0
AND Q.最后组合商品 < DATA.商品名称
)
SELECT * FROM Q WHERE 组合价 = 0
WITH DATA AS(
SELECT * FROM(VALUES
(1, 0.1),
(2, 0.5),
(3, 0.5),
(4, 0.5),
(5, 1),
(6, 1),
(7, 1),
(8, 2),
(9, 2),
(10, 2),
(11, 5),
(12, 5),
(13, 5),
(14, 10),
(15, 10),
(16, 10),
(17, 20),
(18, 20),
(19, 20),
(20, 50),
(21, 50),
(22, 50),
(23, 100),
(24, 100),
(25, 100)
) D(商品名称, 零售价 )
),
Q AS(
SELECT DATA.*,
CONVERT(nvarchar(max), RTRIM(DATA.商品名称)) AS 商品组合,
CONVERT(decimal(18,2), DATA.零售价) AS 组合价,
DATA.商品名称 as 最后组合商品
FROM DATA
WHERE DATA.零售价 <= 30
UNION ALL
SELECT DATA.*,
Q.商品组合 + ', ' + RTRIM(DATA.商品名称) AS 商品组合,
CONVERT(decimal(18, 2), Q.组合价 + DATA.零售价) AS 组合价,
DATA.商品名称 as 最后组合商品
FROM DATA, Q
WHERE Q.组合价 + DATA.零售价 <= 30
AND Q.最后组合商品 < DATA.商品名称
)R
SELECT * FROM Q WHERE 组合价 = 30