Kod:
DECLARE @äpplen TABLE (
antal_äpplen int,
antal_dagar int
);
INSERT INTO @äpplen
VALUES
(7, 7),
(6, 3),
(12, 4);
-- CTE 1
WITH
dagar(dag) AS (
SELECT * FROM STRING_SPLIT('1,2,3,4,5,6,7', ',')
),
äpplen (rad, antal_äpplen, antal_dagar) AS (
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)), * FROM @äpplen
),
utdelning(rad, dag, antal) AS (
SELECT
a.rad,
d.dag,
a.antal_äpplen/a.antal_dagar
FROM dagar d INNER JOIN äpplen a ON d.dag <= a.antal_dagar
)
SELECT [1], [2], [3], [4], [5], [6], [7] FROM utdelning
PIVOT (
SUM(antal) FOR dag IN ([1], [2], [3], [4], [5], [6], [7])
) p;
-- CTE 2
WITH
äpplen (rad, antal_äpplen, antal_dagar) AS (
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)), * FROM @äpplen
),
b (rad, dag, antal)AS (
SELECT a.rad, x.value, a.antal_äpplen/a.antal_dagar FROM äpplen a
CROSS APPLY STRING_SPLIT('1,2,3,4,5,6,7', ',') x
WHERE x.value <= a.antal_dagar
)
SELECT [1], [2], [3], [4], [5], [6], [7] FROM b
PIVOT (
SUM(antal) FOR dag IN ([1], [2], [3], [4], [5], [6], [7])
) p;