Related
I have this table structure that store's employee's attendance daily. I want to get the result so that I could know under the date how many times employee marked attendance if it was checkin it'll give any status let's say IN and if it was checkout it'll say OUT in separate column.
/****** Object: Table [dbo].[Attendance] Script Date: 4/24/2019 2:22:47 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Attendance](
[EmpCode] [int] NULL,
[TimeIn] [datetime] NULL,
[TimeOut] [datetime] NULL
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Employee] Script Date: 4/24/2019 2:22:47 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Employee](
[ID] [int] NOT NULL,
[EmployeeName] [varchar](25) NULL,
[Department] [varchar](25) NULL,
[CenterCode] [int] NULL,
CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[Attendance] ([EmpCode], [TimeIn], [TimeOut]) VALUES (1, CAST(N'2019-02-01 06:30:00.000' AS DateTime), NULL)
GO
INSERT [dbo].[Attendance] ([EmpCode], [TimeIn], [TimeOut]) VALUES (1, NULL, CAST(N'2019-02-01 18:22:00.000' AS DateTime))
GO
INSERT [dbo].[Attendance] ([EmpCode], [TimeIn], [TimeOut]) VALUES (1, CAST(N'2019-02-02 07:21:00.000' AS DateTime), NULL)
GO
INSERT [dbo].[Attendance] ([EmpCode], [TimeIn], [TimeOut]) VALUES (1, NULL, CAST(N'2019-02-02 19:54:00.000' AS DateTime))
GO
INSERT [dbo].[Employee] ([ID], [EmployeeName], [Department], [CenterCode]) VALUES (1, N'Asim', N'Information Tech', 4)
GO
INSERT [dbo].[Employee] ([ID], [EmployeeName], [Department], [CenterCode]) VALUES (2, N'Ali', N'Information Tech', 2)
GO
INSERT [dbo].[Employee] ([ID], [EmployeeName], [Department], [CenterCode]) VALUES (3, N'Isaac', N'Information Tech', 3)
GO
INSERT [dbo].[Employee] ([ID], [EmployeeName], [Department], [CenterCode]) VALUES (4, N'Swagger', N'Information Tech', 4)
GO
INSERT [dbo].[Employee] ([ID], [EmployeeName], [Department], [CenterCode]) VALUES (5, N'Nadine', N'Information Tech', 2)
GO
INSERT [dbo].[Employee] ([ID], [EmployeeName], [Department], [CenterCode]) VALUES (6, N'Julie', N'Information Tech', 4)
GO
INSERT [dbo].[Employee] ([ID], [EmployeeName], [Department], [CenterCode]) VALUES (7, N'Meachum', N'Information Tech', 3)
GO
INSERT [dbo].[Employee] ([ID], [EmployeeName], [Department], [CenterCode]) VALUES (8, N'Bob Lee', N'Information Tech', 4)
GO
ALTER TABLE [dbo].[Attendance] WITH CHECK ADD CONSTRAINT [FK_Attendance_Employee] FOREIGN KEY([EmpCode])
REFERENCES [dbo].[Employee] ([ID])
GO
ALTER TABLE [dbo].[Attendance] CHECK CONSTRAINT [FK_Attendance_Employee]
GO
Now I have wrote a query but as I'm not sure how to use PIVOT function without aggregate funciton so I'm using MIN() and that's why it's only giving me the first timein/timeout of the day.
Here is the query:
SELECT * FROM (
SELECT E.ID, E.EmployeeName, T.DateToCheck, COALESCE(A.val, 'Absent') val
FROM Employee E
CROSS JOIN (
SELECT CAST(DATEADD(DAY, number, '2019-02-01') AS DATE)
FROM master..spt_values
WHERE type = 'P'
AND DATEADD(DAY, number, '2019-02-01') <= '2019-02-28') T(DateToCheck)
LEFT JOIN (SELECT CAST(CAST(COALESCE(TimeIn, TimeOut) AS TIME) AS VARCHAR) val, CAST(COALESCE(TimeIn, TimeOut) AS DATE) AttendanceDateTime, EmpCode FROM Attendance) A ON CAST(A.AttendanceDateTime AS DATE) = T.DateToCheck AND A.EmpCode = E.ID
) T
PIVOT (MIN(val) FOR DateToCheck IN ([2019-02-01],[2019-02-02],[2019-02-03],[2019-02-04],[2019-02-05],[2019-02-06],[2019-02-07],[2019-02-08],[2019-02-09],[2019-02-10],[2019-02-11],[2019-02-12],[2019-02-13],[2019-02-14],[2019-02-15],[2019-02-16],[2019-02-17],[2019-02-18],[2019-02-19],[2019-02-20],[2019-02-21],[2019-02-22],[2019-02-23],[2019-02-24],[2019-02-25],[2019-02-26],[2019-02-27],[2019-02-28])) P;
The expected output result is something like this
EmployeeName Status 2019-02-01 2019-02-02
Asim IN 06:30 07:21
Asim OUT 11:39 19:54
Asim IN 13:06 NULL
Asim OUT 18:22 NULL
I have requirement like copy same parent records to N child with same table. The only difference in the data is Parent Id and Client Id, I have to copy Parent records as it is to child with only ParentId and ClientId value change.
- Parent records may be 1 to 2000 which need to be moved for each client.
- Child records (repeat 1 to 1000) different child.
I have implemented the requirement using SQL Server Cursor but this is extensively very slow if we have parent records more than 1000 and Child (repeat entries) more than 1500. So i would like to know whether it is possible to use CTE instead cursor to gain performance for the bulk insertion.
I am using following code to copy parent records to each client:
DECLARE #id bigint;
--Get list of client which will repeat the rows from Master entries
--This will return three rows Id:1,5,7
DECLARE client_cursor CURSOR FOR SELECT Id FROM Client WHERE ClientName like 'info%'
OPEN client_cursor
FETCH NEXT FROM client_cursor INTO #id;
WHILE ##FETCH_STATUS = 0
BEGIN
/*....*/
/* Other business logic performed here */
/*....*/
INSERT INTO Resources (ParentId,ClientId,Location,Title,[Status],Alert)
--This will return two rows Id:1,2
SELECT Id,#id,Location,Title,[Status],Alert FROM Resources WHERE ParentId IS NULL AND ClientId IS NULL
FETCH NEXT FROM client_cursor INTO #id
END
CLOSE client_cursor;
DEALLOCATE client_cursor;
Following are the screen shot before and after adding bulk Parent records to Child using above code snippet.
-- Table Creation
CREATE TABLE [dbo].[Client](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[ClientName] [varchar](50) NULL,
CONSTRAINT [PK_Client] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Resources](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[ParentId] [bigint] NULL,
[ClientId] [bigint] NULL,
[Location] [varchar](50) NULL,
[Title] [varchar](50) NULL,
[Status] [varchar](50) NULL,
[Alert] [varchar](50) NULL,
CONSTRAINT [PK_Resources] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
-- Default Data Insertion
SET IDENTITY_INSERT [dbo].[Client] ON
INSERT [dbo].[Client] ([Id], [ClientName]) VALUES (1, N'Infosstretch')
INSERT [dbo].[Client] ([Id], [ClientName]) VALUES (2, N'Microsoft')
INSERT [dbo].[Client] ([Id], [ClientName]) VALUES (3, N'Sun System')
INSERT [dbo].[Client] ([Id], [ClientName]) VALUES (4, N'IBM')
INSERT [dbo].[Client] ([Id], [ClientName]) VALUES (5, N'Infosys')
INSERT [dbo].[Client] ([Id], [ClientName]) VALUES (6, N'TCS')
INSERT [dbo].[Client] ([Id], [ClientName]) VALUES (7, N'Infomatica')
SET IDENTITY_INSERT [dbo].[Client] OFF
SET IDENTITY_INSERT [dbo].[Resources] ON
INSERT [dbo].[Resources] ([Id], [ParentId], [ClientId], [Location], [Title], [Status], [Alert]) VALUES (1, NULL, NULL, N'India', N'Master A', N'New', N'Issue with location')
INSERT [dbo].[Resources] ([Id], [ParentId], [ClientId], [Location], [Title], [Status], [Alert]) VALUES (2, NULL, NULL, N'Australia', N'Master B', N'Updated', N'No major issue')
SET IDENTITY_INSERT [dbo].[Resources] OFF
There are probably some reasons from your business rules that are removed for brevity here, but why not something like this?
INSERT #Resources
SELECT
R.Id AS ParentId,
C.Id AS ClientId,
R.Location,
R.Title,
R.Status,
R.Alert
FROM #Resources R
CROSS JOIN #Client C
WHERE R.ParentId IS NULL AND R.ClientId IS NULL -- Root level
AND NOT EXISTS (SELECT * FROM #Resources WHERE ParentId = R.Id) -- Not already populated
-- AND /* Other business logic performed here */
I've this Tree
Country
Region
City
Association
Center
School
Class
i have this Query here
;WITH MyCTE AS
(
SELECT T1.ID, UserId, NULL AS PARENT_ID, T1.GroupID, G.EntityLevelID
FROM UserJobs T1
INNER JOIN [GROUP] G ON T1.GROUPID = G.ID
inner join EntityLevel el on G.EntityLevelID = el.Id
WHERE T1.UserID = 1
UNION ALL
SELECT T2.ID, T2.UserId, EL.ParentID, T2.GroupID, G.EntityLevelID
FROM UserJobs T2
INNER JOIN [GROUP] G ON T2.GROUPID = G.ID
inner join EntityLevel el on G.EntityLevelID = el.Id
INNER JOIN MyCTE itms ON EL.ParentID >= itms.ID
)
SELECT B.*, C.*, A.*
FROM (SELECT DISTINCT * FROM MyCTE) A
INNER JOIN [USER] B ON A.UserID = B.ID
INNER JOIN [Group] C ON A.GroupID = C.ID
order by a.GroupID ;
if i run this query for userID = 1
it will gives me correct Data (it will bring all the users that are under UserA = UserID = 1)
1 UserA 1 Country Manager 1 1 1 NULL 1 1
2 UserB 2 Region Manager 2 2 2 1 2 2
8 UserH 2 Region Manager 2 8 8 1 2 2
3 UserC 3 City Manager 3 3 3 2 3 3
9 UserI 3 City Manager 3 9 9 2 3 3
4 UserD 4 Association Manager 4 4 4 3 4 4
10 UserJ 4 Association Manager 4 10 10 3 4 4
5 UserE 5 Center Manager 5 5 5 4 5 5
6 UserF 6 School Manager 6 6 6 5 6 6
7 UserG 7 Teacher 7 7 7 6 7 7
this is actually what i looking for, but the problem comes when i need to get the user under UserI ID equal 9
The Result is :
9 UserI 3 City Manager 3 9 9 NULL 3 3
and that's wrong because UserI has one user Under him which is UserJ
so, the result must looks like
9 UserI 3 City Manager 3 9 9 NULL 3 3
10 UserJ 4 Association Manager 4 10 10 NULL 4 4
same error Occurs in UserID = 3 which gives me a UserJ which is out of tree
Script And Data is Here :
CREATE TABLE [dbo].[Assocation](
[ID] [int] NOT NULL,
[Name] [nvarchar](50) NULL,
[CityID] [int] NULL,
CONSTRAINT [PK_Assocation] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Center] Script Date: 2017-04-04 8:33:43 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Center](
[ID] [int] NOT NULL,
[Name] [nvarchar](50) NULL,
[AssociationID] [int] NULL,
CONSTRAINT [PK_Center] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[City] Script Date: 2017-04-04 8:33:43 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[City](
[ID] [int] NOT NULL,
[Name] [nvarchar](50) NULL,
[RegionID] [int] NULL,
CONSTRAINT [PK_City] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Class] Script Date: 2017-04-04 8:33:43 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Class](
[ID] [int] NOT NULL,
[Name] [nvarchar](50) NULL,
[SchoolID] [int] NULL,
CONSTRAINT [PK_Class] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Country] Script Date: 2017-04-04 8:33:43 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Country](
[ID] [int] NOT NULL,
[Name] [nvarchar](50) NULL,
CONSTRAINT [PK_Country] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[EntityLevel] Script Date: 2017-04-04 8:33:43 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[EntityLevel](
[ID] [int] NOT NULL,
[Name] [nvarchar](50) NULL,
[ParentID] [int] NULL,
CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Group] Script Date: 2017-04-04 8:33:43 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Group](
[ID] [int] NOT NULL,
[Name] [nvarchar](50) NULL,
[EntityLevelID] [int] NULL,
CONSTRAINT [PK_Group] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[Region] Script Date: 2017-04-04 8:33:43 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Region](
[ID] [int] NOT NULL,
[Name] [nvarchar](50) NULL,
[CountryID] [int] NULL,
CONSTRAINT [PK_Region] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[School] Script Date: 2017-04-04 8:33:43 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[School](
[ID] [int] NOT NULL,
[Name] [nvarchar](50) NULL,
[CenterID] [int] NULL,
CONSTRAINT [PK_School] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[User] Script Date: 2017-04-04 8:33:43 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[User](
[ID] [int] NOT NULL,
[Name] [nvarchar](50) NULL,
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[UserJobs] Script Date: 2017-04-04 8:33:43 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[UserJobs](
[ID] [int] NOT NULL,
[UserID] [int] NOT NULL,
[GroupID] [int] NOT NULL,
[EntityID] [int] NOT NULL,
CONSTRAINT [PK_UserJobs] PRIMARY KEY CLUSTERED
(
[ID] ASC,
[UserID] ASC,
[GroupID] ASC,
[EntityID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT [dbo].[Assocation] ([ID], [Name], [CityID]) VALUES (1, N'KH', 1)
GO
INSERT [dbo].[Assocation] ([ID], [Name], [CityID]) VALUES (2, N'mkh_ass', 2)
GO
INSERT [dbo].[Center] ([ID], [Name], [AssociationID]) VALUES (1, N'NorthCenter', 1)
GO
INSERT [dbo].[Center] ([ID], [Name], [AssociationID]) VALUES (2, N'SouthCenter', 1)
GO
INSERT [dbo].[City] ([ID], [Name], [RegionID]) VALUES (1, N'Jeddah', 1)
GO
INSERT [dbo].[City] ([ID], [Name], [RegionID]) VALUES (2, N'MakkahCiry', 1)
GO
INSERT [dbo].[Class] ([ID], [Name], [SchoolID]) VALUES (1, N'Class1', 1)
GO
INSERT [dbo].[Class] ([ID], [Name], [SchoolID]) VALUES (2, N'Class2', 1)
GO
INSERT [dbo].[Class] ([ID], [Name], [SchoolID]) VALUES (3, N'class3', 2)
GO
INSERT [dbo].[Class] ([ID], [Name], [SchoolID]) VALUES (4, N'class4', 2)
GO
INSERT [dbo].[Country] ([ID], [Name]) VALUES (1, N'KSA')
GO
INSERT [dbo].[Country] ([ID], [Name]) VALUES (2, N'UAE')
GO
INSERT [dbo].[EntityLevel] ([ID], [Name], [ParentID]) VALUES (1, N'Country', NULL)
GO
INSERT [dbo].[EntityLevel] ([ID], [Name], [ParentID]) VALUES (2, N'Region', 1)
GO
INSERT [dbo].[EntityLevel] ([ID], [Name], [ParentID]) VALUES (3, N'City', 2)
GO
INSERT [dbo].[EntityLevel] ([ID], [Name], [ParentID]) VALUES (4, N'Association', 3)
GO
INSERT [dbo].[EntityLevel] ([ID], [Name], [ParentID]) VALUES (5, N'Center', 4)
GO
INSERT [dbo].[EntityLevel] ([ID], [Name], [ParentID]) VALUES (6, N'School', 5)
GO
INSERT [dbo].[EntityLevel] ([ID], [Name], [ParentID]) VALUES (7, N'Class', 6)
GO
INSERT [dbo].[Group] ([ID], [Name], [EntityLevelID]) VALUES (1, N'Country Manager', 1)
GO
INSERT [dbo].[Group] ([ID], [Name], [EntityLevelID]) VALUES (2, N'Region Manager', 2)
GO
INSERT [dbo].[Group] ([ID], [Name], [EntityLevelID]) VALUES (3, N'City Manager', 3)
GO
INSERT [dbo].[Group] ([ID], [Name], [EntityLevelID]) VALUES (4, N'Association Manager', 4)
GO
INSERT [dbo].[Group] ([ID], [Name], [EntityLevelID]) VALUES (5, N'Center Manager', 5)
GO
INSERT [dbo].[Group] ([ID], [Name], [EntityLevelID]) VALUES (6, N'School Manager', 6)
GO
INSERT [dbo].[Group] ([ID], [Name], [EntityLevelID]) VALUES (7, N'Teacher', 7)
GO
INSERT [dbo].[Region] ([ID], [Name], [CountryID]) VALUES (1, N'Makkah', 1)
GO
INSERT [dbo].[Region] ([ID], [Name], [CountryID]) VALUES (2, N'Riyadh', 1)
GO
INSERT [dbo].[School] ([ID], [Name], [CenterID]) VALUES (1, N'School1', 1)
GO
INSERT [dbo].[School] ([ID], [Name], [CenterID]) VALUES (2, N'School2', 1)
GO
INSERT [dbo].[School] ([ID], [Name], [CenterID]) VALUES (3, N'School3', 2)
GO
INSERT [dbo].[User] ([ID], [Name]) VALUES (1, N'UserA')
GO
INSERT [dbo].[User] ([ID], [Name]) VALUES (2, N'UserB')
GO
INSERT [dbo].[User] ([ID], [Name]) VALUES (3, N'UserC')
GO
INSERT [dbo].[User] ([ID], [Name]) VALUES (4, N'UserD')
GO
INSERT [dbo].[User] ([ID], [Name]) VALUES (5, N'UserE')
GO
INSERT [dbo].[User] ([ID], [Name]) VALUES (6, N'UserF')
GO
INSERT [dbo].[User] ([ID], [Name]) VALUES (7, N'UserG')
GO
INSERT [dbo].[User] ([ID], [Name]) VALUES (8, N'UserH')
GO
INSERT [dbo].[User] ([ID], [Name]) VALUES (9, N'UserI')
GO
INSERT [dbo].[User] ([ID], [Name]) VALUES (10, N'UserJ')
GO
INSERT [dbo].[UserJobs] ([ID], [UserID], [GroupID], [EntityID]) VALUES (1, 1, 1, 1)
GO
INSERT [dbo].[UserJobs] ([ID], [UserID], [GroupID], [EntityID]) VALUES (2, 2, 2, 1)
GO
INSERT [dbo].[UserJobs] ([ID], [UserID], [GroupID], [EntityID]) VALUES (3, 3, 3, 1)
GO
INSERT [dbo].[UserJobs] ([ID], [UserID], [GroupID], [EntityID]) VALUES (4, 4, 4, 1)
GO
INSERT [dbo].[UserJobs] ([ID], [UserID], [GroupID], [EntityID]) VALUES (5, 5, 5, 1)
GO
INSERT [dbo].[UserJobs] ([ID], [UserID], [GroupID], [EntityID]) VALUES (6, 6, 6, 1)
GO
INSERT [dbo].[UserJobs] ([ID], [UserID], [GroupID], [EntityID]) VALUES (7, 7, 7, 1)
GO
INSERT [dbo].[UserJobs] ([ID], [UserID], [GroupID], [EntityID]) VALUES (8, 8, 2, 2)
GO
INSERT [dbo].[UserJobs] ([ID], [UserID], [GroupID], [EntityID]) VALUES (9, 9, 3, 2)
GO
INSERT [dbo].[UserJobs] ([ID], [UserID], [GroupID], [EntityID]) VALUES (10, 10, 4, 2)
GO
any solution for that ...
I will repeat that your PARENT_ID values are incorrect. Let us look in detail on the UserI (ID = 9) query to see why.
SELECT T1.ID, UserId, NULL AS PARENT_ID, T1.GroupID, G.EntityLevelID
FROM #UserJobs T1
INNER JOIN #GROUP G ON T1.GROUPID = G.ID
inner join #EntityLevel el on G.EntityLevelID = el.Id
WHERE T1.UserID = 9
This would be the base query when processing UserI, as defined in your data (NOTE: I used temp tables instead of permanent tables to simplify cleanup after the tests) The output of this query fragment looks like this:
ID UserId PARENT_ID GroupID EntityLevelID
9 9 NULL 3 3
No problem so far. So, the recursion portion of your CTE is:
UNION ALL
SELECT T2.ID, T2.UserId, EL.ParentID, T2.GroupID, G.EntityLevelID
FROM #UserJobs T2
INNER JOIN #GROUP G ON T2.GROUPID = G.ID
inner join #EntityLevel el on G.EntityLevelID = el.Id
INNER JOIN MyCTE itms
ON EL.ParentID >= itms.ID -- <<<< PROBLEM!!
As we see above, the value in itms.ID for the first part of this query is [9]. This needs to join to a value in the #EntityLevel.ParentID field. But if you look in the values you are inserting into the #EntityLevel table, your highest ParentID value is a [6]. Since there is no record matching the itms.ID value, no additional records are linked.
A similar problem comes with the UserID = 3 record (Examine the output of the queries to figure out why).
To recap - If you want an item to be linked to another item in a tree, there must be a specific, unique link between the items. You need to ensure that the specific, unique link exists. Note that it does not need to be a single data value, but every time your tree forks, the elements on one branch must be identifiably distinct from the elements on the other branch based on their data values.
I want to create a temp table maybe using pivot for month and year as column.
I mentioned the question and solution for the pivot
Summarising the months data using pivot
CREATE TABLE [dbo].[Table1]([PID] [int] NULL,[ProductDesc] [nvarchar](50) NULL,[ProductCode] [nvarchar](10) NULL) ON [PRIMARY]
CREATE TABLE [dbo].[Table2]([Date] [varchar](50) NULL,[PID] [int] NULL) ON [PRIMARY]
---insert script---
INSERT [dbo].[Table1] ([PID], [ProductDesc], [ProductCode]) VALUES (1, N'Packet-Eye', N'P001')
INSERT [dbo].[Table1] ([PID], [ProductDesc], [ProductCode]) VALUES (2, N'Wiggy', N'W099 ')
INSERT [dbo].[Table1] ([PID], [ProductDesc], [ProductCode]) VALUES (3, N'Wimax-Lite', N'W001')
INSERT [dbo].[Table1] ([PID], [ProductDesc], [ProductCode]) VALUES (4, N'Wimax-Home', N'e W002 ')
INSERT [dbo].[Table2] ([Date], [PID]) VALUES (N'1/14/2009 ', 1)
INSERT [dbo].[Table2] ([Date], [PID]) VALUES (N'1/15/2009 ', 1)
INSERT [dbo].[Table2] ([Date], [PID]) VALUES (N'2/1/2009', 2)
INSERT [dbo].[Table2] ([Date], [PID]) VALUES (N'3/3/2009', 3)
GO
SELECT *
FROM
(
SELECT t1.productdesc as pd,COUNT(month(t2.date))as dates,
DateName( month , DateAdd( month , MONTH(t2.date) , 0 ) - 1 ) as mon
FROM table1 t1 inner join table2 t2 on t1.pid=t2.pid
where year(date) between 2009
and 2010 group by productdesc,month(t2.date),month (t2.date)
) AS D
PIVOT
(
sum(dates)
FOR mon IN( [January],[February],[March],[April],[May],[June],[July],[August],[September],[October],[November],[December])
) AS P
I want to extract the result of a person in a poll by type of poll and a determined year, group by area.
This is the tables scripts and some sample data:
/****** Object: Table [dbo].[ANSWERS] Script Date: 09/09/2015 7:08:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ANSWERS](
[FK_QUESTION] [int] NOT NULL,
[CHOICE] [smallint] NOT NULL,
[TYPE_POLL] [bit] NOT NULL,
[FK_ID_PERSON] [decimal](18, 0) NOT NULL,
CONSTRAINT [PK_ANSWERS] PRIMARY KEY CLUSTERED
(
[FK_QUESTION] ASC,
[TYPE_POLL] ASC,
[FK_ID_PERSON] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[AREA] Script Date: 09/09/2015 7:08:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[AREA](
[ID_AREA] [int] IDENTITY(1,1) NOT NULL,
[FK_POLL] [int] NULL,
[NAME_AREA] [varchar](100) NULL,
CONSTRAINT [PK_AREA] PRIMARY KEY CLUSTERED
(
[ID_AREA] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[JOBS] Script Date: 09/09/2015 7:08:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[JOBS](
[ID_JOB] [int] NOT NULL,
[NAME_JOB] [varchar](50) NOT NULL,
CONSTRAINT [PK_srh3100t] PRIMARY KEY CLUSTERED
(
[ID_JOB] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[PERSON] Script Date: 09/09/2015 7:08:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[PERSON](
[ID_PERSON] [decimal](18, 0) NOT NULL,
[JOB_PERSON] [int] NOT NULL,
[NAME] [varchar](200) NOT NULL,
[LAST_NAME] [varchar](200) NOT NULL,
CONSTRAINT [PK_PERSON] PRIMARY KEY CLUSTERED
(
[ID_PERSON] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[POINTS] Script Date: 09/09/2015 7:08:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[POINTS](
[FK_JOB] [int] NOT NULL,
[FK_QUESTION] [int] NOT NULL,
[POINT] [numeric](4, 2) NOT NULL,
CONSTRAINT [PK_POINTS_1] PRIMARY KEY CLUSTERED
(
[FK_JOB] ASC,
[FK_QUESTION] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object: Table [dbo].[POLL] Script Date: 09/09/2015 7:08:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[POLL](
[ID_POLL] [int] IDENTITY(1,1) NOT NULL,
[YEARS] [smallint] NOT NULL,
[NAME] [varchar](100) NOT NULL,
[DATE_BEG] [date] NOT NULL,
[DATE_END] [date] NOT NULL,
[AUTO] [numeric](4, 2) NOT NULL,
[BOSS] [numeric](4, 2) NOT NULL,
CONSTRAINT [PK_POLL_1] PRIMARY KEY CLUSTERED
(
[ID_POLL] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[QUESTION] Script Date: 09/09/2015 7:08:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[QUESTION](
[ID_QUESTION] [int] IDENTITY(1,1) NOT NULL,
[FK_AREA] [int] NULL,
[NAME] [varchar](50) NULL,
[DESCRIPTION] [varchar](400) NULL,
CONSTRAINT [PK_QUESTION] PRIMARY KEY CLUSTERED
(
[ID_QUESTION] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[ANSWERS] ([FK_QUESTION], [CHOICE], [TYPE_POLL], [FK_ID_PERSON]) VALUES (1, 1, 0, CAST(1 AS Decimal(18, 0)))
INSERT [dbo].[ANSWERS] ([FK_QUESTION], [CHOICE], [TYPE_POLL], [FK_ID_PERSON]) VALUES (1, 1, 1, CAST(1 AS Decimal(18, 0)))
INSERT [dbo].[ANSWERS] ([FK_QUESTION], [CHOICE], [TYPE_POLL], [FK_ID_PERSON]) VALUES (2, 1, 0, CAST(1 AS Decimal(18, 0)))
INSERT [dbo].[ANSWERS] ([FK_QUESTION], [CHOICE], [TYPE_POLL], [FK_ID_PERSON]) VALUES (2, 2, 1, CAST(1 AS Decimal(18, 0)))
INSERT [dbo].[ANSWERS] ([FK_QUESTION], [CHOICE], [TYPE_POLL], [FK_ID_PERSON]) VALUES (3, 3, 0, CAST(1 AS Decimal(18, 0)))
INSERT [dbo].[ANSWERS] ([FK_QUESTION], [CHOICE], [TYPE_POLL], [FK_ID_PERSON]) VALUES (3, 1, 1, CAST(1 AS Decimal(18, 0)))
SET IDENTITY_INSERT [dbo].[AREA] ON
INSERT [dbo].[AREA] ([ID_AREA], [FK_POLL], [NAME_AREA]) VALUES (1, 1, N'AREA 1')
INSERT [dbo].[AREA] ([ID_AREA], [FK_POLL], [NAME_AREA]) VALUES (2, 1, N'AREA 2')
INSERT [dbo].[AREA] ([ID_AREA], [FK_POLL], [NAME_AREA]) VALUES (3, 1, N'AREA 3')
INSERT [dbo].[AREA] ([ID_AREA], [FK_POLL], [NAME_AREA]) VALUES (4, 1, N'AREA 4')
SET IDENTITY_INSERT [dbo].[AREA] OFF
INSERT [dbo].[JOBS] ([ID_JOB], [NAME_JOB]) VALUES (1, N'JOB 1')
INSERT [dbo].[JOBS] ([ID_JOB], [NAME_JOB]) VALUES (2, N'JOB 2')
INSERT [dbo].[JOBS] ([ID_JOB], [NAME_JOB]) VALUES (3, N'JOB 3')
INSERT [dbo].[JOBS] ([ID_JOB], [NAME_JOB]) VALUES (4, N'JOB 4')
INSERT [dbo].[PERSON] ([ID_PERSON], [JOB_PERSON], [NAME], [LAST_NAME]) VALUES (CAST(1 AS Decimal(18, 0)), 1, N'MATT', N'TUCK')
INSERT [dbo].[PERSON] ([ID_PERSON], [JOB_PERSON], [NAME], [LAST_NAME]) VALUES (CAST(2 AS Decimal(18, 0)), 2, N'MATT', N'HEAFY')
INSERT [dbo].[PERSON] ([ID_PERSON], [JOB_PERSON], [NAME], [LAST_NAME]) VALUES (CAST(3 AS Decimal(18, 0)), 3, N'SYNISTER', N'GATES')
INSERT [dbo].[PERSON] ([ID_PERSON], [JOB_PERSON], [NAME], [LAST_NAME]) VALUES (CAST(4 AS Decimal(18, 0)), 4, N'THOMAS', N'YOUNGBLOOD')
INSERT [dbo].[POINTS] ([FK_JOB], [FK_QUESTION], [POINT]) VALUES (1, 1, CAST(1.00 AS Numeric(4, 2)))
INSERT [dbo].[POINTS] ([FK_JOB], [FK_QUESTION], [POINT]) VALUES (1, 2, CAST(2.00 AS Numeric(4, 2)))
INSERT [dbo].[POINTS] ([FK_JOB], [FK_QUESTION], [POINT]) VALUES (1, 3, CAST(3.00 AS Numeric(4, 2)))
INSERT [dbo].[POINTS] ([FK_JOB], [FK_QUESTION], [POINT]) VALUES (1, 4, CAST(4.00 AS Numeric(4, 2)))
INSERT [dbo].[POINTS] ([FK_JOB], [FK_QUESTION], [POINT]) VALUES (2, 1, CAST(1.00 AS Numeric(4, 2)))
INSERT [dbo].[POINTS] ([FK_JOB], [FK_QUESTION], [POINT]) VALUES (2, 2, CAST(2.00 AS Numeric(4, 2)))
INSERT [dbo].[POINTS] ([FK_JOB], [FK_QUESTION], [POINT]) VALUES (2, 3, CAST(3.00 AS Numeric(4, 2)))
INSERT [dbo].[POINTS] ([FK_JOB], [FK_QUESTION], [POINT]) VALUES (2, 4, CAST(4.00 AS Numeric(4, 2)))
SET IDENTITY_INSERT [dbo].[POLL] ON
INSERT [dbo].[POLL] ([ID_POLL], [YEARS], [NAME], [DATE_BEG], [DATE_END], [AUTO], [BOSS]) VALUES (1, 2015, N'POLL 1', CAST(0x693A0B00 AS Date), CAST(0xD23A0B00 AS Date), CAST(20.00 AS Numeric(4, 2)), CAST(80.00 AS Numeric(4, 2)))
SET IDENTITY_INSERT [dbo].[POLL] OFF
SET IDENTITY_INSERT [dbo].[QUESTION] ON
INSERT [dbo].[QUESTION] ([ID_QUESTION], [FK_AREA], [NAME], [DESCRIPTION]) VALUES (1, 1, N'QUESTION 1', N'aaa')
INSERT [dbo].[QUESTION] ([ID_QUESTION], [FK_AREA], [NAME], [DESCRIPTION]) VALUES (2, 1, N'QUESTION 2', N'bbb')
INSERT [dbo].[QUESTION] ([ID_QUESTION], [FK_AREA], [NAME], [DESCRIPTION]) VALUES (3, 2, N'QUESTION 3', N'ccc')
INSERT [dbo].[QUESTION] ([ID_QUESTION], [FK_AREA], [NAME], [DESCRIPTION]) VALUES (4, 2, N'QUESTION 4', N'ddd')
INSERT [dbo].[QUESTION] ([ID_QUESTION], [FK_AREA], [NAME], [DESCRIPTION]) VALUES (5, 3, N'QUESTION 5', N'eee')
INSERT [dbo].[QUESTION] ([ID_QUESTION], [FK_AREA], [NAME], [DESCRIPTION]) VALUES (6, 3, N'QUESTION 6', N'fff')
INSERT [dbo].[QUESTION] ([ID_QUESTION], [FK_AREA], [NAME], [DESCRIPTION]) VALUES (7, 4, N'QUESTION 7', N'ggg')
INSERT [dbo].[QUESTION] ([ID_QUESTION], [FK_AREA], [NAME], [DESCRIPTION]) VALUES (8, 4, N'QUESTION 8', N'hhh')
SET IDENTITY_INSERT [dbo].[QUESTION] OFF
USE [master]
GO
And this is the query I have tried:
SELECT AREA.NAME_AREA,
(SELECT SUM(ANSWERS.CHOICE * POINTS.POINT / 5) WHERE ANSWERS.TYPE_POLL= 0) AS RESULT_PERSON,
(SELECT SUM(ANSWERS.CHOICE * POINTS.POINT / 5) WHERE ANSWERS.TYPE_POLL= 1) AS RESULT_BOSS
FROM POLL INNER JOIN
AREA ON POLL.ID_POLL = AREA.FK_POLL INNER JOIN
QUESTION ON AREA.ID_AREA = QUESTION.FK_AREA INNER JOIN
POINTS ON QUESTION.ID_QUESTION = POINTS.FK_QUESTION INNER JOIN
JOBS INNER JOIN
PERSON ON JOBS.ID_JOB = PERSON.JOB_PERSON ON POINTS.FK_JOB = JOBS.ID_JOB INNER JOIN
ANSWERS ON QUESTION.ID_QUESTION = ANSWERS.FK_QUESTION AND PERSON.ID_PERSON = ANSWERS.FK_ID_PERSON
WHERE (POLL.YEARS = 2015) AND (PERSON.ID_PERSON = 1) GROUP BY AREA.NAME_AREA , ANSWERS.TYPE_POLL
And I want the output be like this:
+------------+---------------+---------------+
| NAME_AREA | RESULT_PERSON | RESULT_BOSS |
+------------+---------------+---------------+
| AREA 1 | 0.6 | 1 |
| AREA 2 | 1.8 | 0.6 |
+------------+---------------+---------------+
But I'm getting the result like this:
+------------+---------------+---------------+
| NAME_AREA | RESULT_PERSON | RESULT_BOSS |
+------------+---------------+---------------+
| AREA 1 | 0.6 | NULL |
| AREA 2 | 1.8 | NULL |
| AREA 1 | NULL | 1 |
| AREA 2 | NULL | 0.6 |
+------------+---------------+---------------+
It is something I am missing...?
Without reading your query and finding better solution:
SELECT t.NAME_AREA, MAX(t.RESULT_PERSON) AS RESULT_PERSON, MAX(t.RESULT_BOSS) AS RESULT_BOSS
FROM (
SELECT AREA.NAME_AREA,
(SELECT SUM(ANSWERS.CHOICE * POINTS.POINT / 5) WHERE ANSWERS.TYPE_POLL= 0) AS RESULT_PERSON,
(SELECT SUM(ANSWERS.CHOICE * POINTS.POINT / 5) WHERE ANSWERS.TYPE_POLL= 1) AS RESULT_BOSS
FROM POLL INNER JOIN
AREA ON POLL.ID_POLL = AREA.FK_POLL INNER JOIN
QUESTION ON AREA.ID_AREA = QUESTION.FK_AREA INNER JOIN
POINTS ON QUESTION.ID_QUESTION = POINTS.FK_QUESTION INNER JOIN
JOBS INNER JOIN
PERSON ON JOBS.ID_JOB = PERSON.JOB_PERSON ON POINTS.FK_JOB = JOBS.ID_JOB INNER JOIN
ANSWERS ON QUESTION.ID_QUESTION = ANSWERS.FK_QUESTION AND PERSON.ID_PERSON = ANSWERS.FK_ID_PERSON
WHERE (POLL.YEARS = 2015) AND (PERSON.ID_PERSON = 1) GROUP BY AREA.NAME_AREA , ANSWERS.TYPE_POLL)
AS t
GROUP BY NAME_AREA;
I am aware there are more efficient and secure ways, this is just quick workaround.
You can pass It to subquery and add only NAME_AREA to GROUP BY clause in following:
SELECT NAME_AREA, MAX(RESULT_PERSON) AS RESULT_PERSON, MAX(RESULT_BOSS) AS RESULT_BOSS
FROM(
SELECT AREA.NAME_AREA,
(SELECT SUM(ANSWERS.CHOICE * POINTS.POINT / 5) WHERE ANSWERS.TYPE_POLL= 0) AS RESULT_PERSON,
(SELECT SUM(ANSWERS.CHOICE * POINTS.POINT / 5) WHERE ANSWERS.TYPE_POLL= 1) AS RESULT_BOSS
FROM POLL INNER JOIN
AREA ON POLL.ID_POLL = AREA.FK_POLL INNER JOIN
QUESTION ON AREA.ID_AREA = QUESTION.FK_AREA INNER JOIN
POINTS ON QUESTION.ID_QUESTION = POINTS.FK_QUESTION INNER JOIN
JOBS INNER JOIN
PERSON ON JOBS.ID_JOB = PERSON.JOB_PERSON ON POINTS.FK_JOB = JOBS.ID_JOB INNER JOIN
ANSWERS ON QUESTION.ID_QUESTION = ANSWERS.FK_QUESTION AND PERSON.ID_PERSON = ANSWERS.FK_ID_PERSON
WHERE (POLL.YEARS = 2015) AND (PERSON.ID_PERSON = 1)
GROUP BY AREA.NAME_AREA , ANSWERS.TYPE_POLL
)x
GROUP BY NAME_AREA
OUTPUT
NAME_AREA RESULT_PERSON RESULT_BOSS
AREA 1 0.600000 1.000000
AREA 2 1.800000 0.600000
Try this
SELECT AREA.NAME_AREA,
Sum(CASE WHEN ANSWERS.TYPE_POLL = 0 THEN ANSWERS.CHOICE * POINTS.POINT / 5 ELSE 0 END) AS RESULT_PERSON,
Sum(CASE WHEN ANSWERS.TYPE_POLL = 1 THEN ANSWERS.CHOICE * POINTS.POINT / 5 ELSE 0 END) AS RESULT_BOSS
FROM POLL
INNER JOIN AREA
ON POLL.ID_POLL = AREA.FK_POLL
INNER JOIN QUESTION
ON AREA.ID_AREA = QUESTION.FK_AREA
INNER JOIN POINTS
ON QUESTION.ID_QUESTION = POINTS.FK_QUESTION
INNER JOIN JOBS
ON POINTS.FK_JOB = JOBS.ID_JOB
INNER JOIN PERSON
ON JOBS.ID_JOB = PERSON.JOB_PERSON
INNER JOIN ANSWERS
ON QUESTION.ID_QUESTION = ANSWERS.FK_QUESTION
AND PERSON.ID_PERSON = ANSWERS.FK_ID_PERSON
WHERE ( POLL.YEARS = 2015 )
AND ( PERSON.ID_PERSON = 1 )
GROUP BY AREA.NAME_AREA