SQL Select query to include each row a number of times
Silly, I just misinterpreted the results by using wrong ordering. The CROSS JOIN was indeed the correct approach. Here's what I did (please do correct me if this is not the proper approach to take):

WITH week(day) AS 
(
  SELECT TOP (7) number + 1 
  FROM [master].dbo.spt_values
  WHERE [type] = N'P' ORDER BY number
)

SELECT key, prc, fixweight, week.day
  FROM weights
  CROSS JOIN week
  ORDER BY key


As have been suggested by the comments: use spt_values only as a quick hack for ad-hoc queries or testing, in production you should use a number table or, if the list of numbers is so slow, you can use ypercube's solution:

SELECT key, prc, fixweight, week.day
  FROM weights
  CROSS JOIN (VALUES (1), (2), (3), (4), (5), (6), (7)) AS week(day)
  ORDER BY key