I have 2 tables Users and TimeSheets, Timesheets table has column UserId which is users id form users table obviously 🙂
Logic
And I’m trying to get all data of Timesheets table plus just name of user from users table but somehow it seems like my query is other way around!
Now I know this might be a simple query but I personally have no idea about SQL (my bad!)
Here is my query:
CREATE PROCEDURE [dbo].[GetTimeSheets]
AS
BEGIN
    SELECT 
        t.Id, t.Enter_time, t.Exit_Time, t.Total, t.Date, 
        t.Month, t.Year, u.Name AS username
    FROM 
        TimeSheets t
    FULL OUTER JOIN 
        Users u ON u.Id = t.UserId
    GROUP BY 
        t.Id, t.Enter_time, t.Exit_Time, t.Total, t.Date, 
        t.Month, t.Year, u.Name
END;
And here is screenshot of returned data:
As you can see I get my users names without any data being existed in timesheets table!
This view supposed to get timesheets table and then username of each row from users.
Update
Here is my timesheets table schema
CREATE TABLE [dbo].[TimeSheets]
(
    [Id] INT NOT NULL PRIMARY KEY, 
    [UserId] INT NOT NULL, 
    [Enter_time] TIME NOT NULL, 
    [Exit_Time] TIME NULL, 
    [Total] TIME NULL, 
    [Date] DATE NULL, 
    [Month] NVARCHAR(50) NOT NULL , 
    [Year] NVARCHAR(50) NOT NULL , 
    CONSTRAINT [FK_TimeSheets_Users] 
        FOREIGN KEY ([UserId]) REFERENCES [dbo].[Users]([Id])
);
And here is users table
CREATE TABLE [dbo].[Users] 
(
    [Id]       INT            NOT NULL,
    [UserType] NVARCHAR (50)  NOT NULL,
    [Name]     NVARCHAR (100) NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);
Advertisement
Answer
It seems that you want an INNER join and since you are not doing any aggregation there is no need for GROUP BY:
SELECT t.*, 
       u.Name AS username
FROM TimeSheets t
INNER JOIN Users u 
ON u.Id = t.UserId;
By doing an INNER join you get results only when there is a match between 2 rows in the 2 tables.
