我需要一个简单的查询帮助,将值分成相等的数字。但我也想避免小数值将它们全部累加到最终值。这可以通过下面的查询实现,但是如果我选择不同的数据类型,例如 MONEY 或 NUMERIC @amt ,这很棘手。任何人都可以使用 MONEY 或 NUMERIC 数据类型执行下面的操作吗?
DECLARE @tbl TABLE (id TINYINT, princ NUMERIC (14,2))
DECLARE @counter INT = 1
DECLARE @term TINYINT = 12
DECLARE @amt INT = 50000
DECLARE @decimals INT = @amt-((@amt/@term)*@term)
WHILE @counter <= @term
BEGIN
INSERT INTO @tbl (id,princ)
SELECT @counter, @amt/@term
SET @counter = @counter + 1
UPDATE @tbl SET princ = princ+@decimals WHERE id = @term
END
SELECT * FROM @tbl
答案 0 :(得分:0)
<Do what you need to do you populate the table, excluding the last row>
INSERT INTO
@tbl (
id,
princ
)
SELECT
MAX(id) + 1,
@amt - SUM(princ)
FROM
@tbl
或者,或许,CTE ......
WITH
recursive_distribution AS
(
SELECT 0 AS id, CAST(@amt / @term AS INT) AS princ
UNION ALL
SELECT id + 1, princ
FROM recursive_distribution
WHERE id < @term - 1
UNION ALL
SELECT 1, @amt - (princ * (@term-1))
FROM recursive_distribution
WHERE id = @term - 1
)
INSERT INTO
@tbl (id, princ)
SELECT
id, princ
FROM
recursive_distribution
WHERE
id > 0
OPTION
(MAXRECURSION 0) -- Only needed if @term >= 100
(从0开始,然后排除第0行意味着可以应对@term = 1)