Try something like this:DECLARE @TableA TABLE( user_name VARCHAR(10) NOT NULL, transaction_date DATETIME NOT NULL, transaction_id INT NOT NULL, PRIMARY KEY(user_name, transaction_date));INSERT INTO @TableA(user_name, transaction_date, transaction_id) VALUES('User1', '20100101', 1), ('User1', '20100103', 2), ('User2', '20100102', 1), ('User2', '20100131', 1);DECLARE @TableB TABLE( date DATETIME NOT NULL PRIMARY KEY);INSERT INTO @TableB(date) SELECT DATEADD(DAY, V.number, '20100101') FROM master..spt_values AS V WHERE V.type = 'P' AND V.number BETWEEN 0 AND 30;SELECT A1.user_name, B.date, A2.transaction_id FROM (SELECT DISTINCT user_name FROM @TableA) AS A1 CROSS JOIN @TableB AS B LEFT OUTER JOIN @TableA AS A2 ON A2.user_name = A1.user_name AND A2.transaction_date >= B.date AND A2.transaction_date < DATEADD(DAY, 1, B.date);