2012-01-16 1 views
1

私はcomapny用のWebアプリケーションを開発しています。このアプリケーションは、ユーザーにクイズを提供します。今、私は経営陣にとって強力で有意義なダッシュボードを開発する必要があります。ダッシュボードには、show%参加=最後に受講したクイズの数を部門レベルで表示し、各部門を比較する必要があります。部門レベルの先月の参加率をどのように表示し、各部門を比較するのですか?

質問です:

EMPLOYEE表:ユーザー名、名前、職業、DivisionID

分割テーブル:DivisionID、DivisionName

クイズ表Iは、次のデータベースの設計を持っています:クイズID、タイトル、説明

UserQuizテーブル:UserQuizID、スコア、DateTimeComplete、QuizID、ユーザー名

注:各テーブルの最初の属性はプライマリキーです。完了率を表示するために私が使用しています(しかし、私はそれについては確認していない)ことを

SQLクエリは次のとおりです。

SELECT 
    COUNT(DISTINCT dbo.employee.UserName) UserCount, 
    (SELECT COUNT(*) FROM dbo.Quiz) AS [Total Number of Quizzes], 
    (SELECT COUNT(*) FROM dbo.Quiz)*COUNT(DISTINCT dbo.employee.UserName) AS [Total Number of Quizzes for All users], 
    dbo.Divisions.DivisionName, 
    DATENAME(Month, dbo.UserQuiz.DateTimeComplete) AS MONTH, 
    COUNT(DISTINCT dbo.UserQuiz.QuizId)*COUNT(DISTINCT dbo.employee.UserName) AS [Completed This Month], 
    COUNT(DISTINCT dbo.UserQuiz.QuizId)*100/(SELECT COUNT(*) FROM dbo.Quiz) AS [Percent Completion] 
FROM dbo.employee 
JOIN dbo.Divisions ON dbo.employee.DivisionCode = dbo.Divisions.SapCode 
LEFT JOIN dbo.UserQuiz ON dbo.UserQuiz.Username = dbo.employee.Username 
WHERE dbo.UserQuiz.DateTimeComplete IS NOT NULL 
GROUP BY 
    dbo.Divisions.DivisionName, 
    DATENAME(Month, dbo.UserQuiz.DateTimeComplete) 

先月のパーセント完了を示している私が今欲しいですただそれを行う方法は?割合は、次のように計算する必要があります?その計算に来て、どのように各従業員/(部門の従業員の総数* quzziesの合計数) で撮影したクイズの数の (和

ここではいくつかのデータとスキーマは次のとおりです。

/****** Object: Table [dbo].[Divisions] Script Date: 01/15/2012 12:29:48 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
CREATE TABLE [dbo].[Divisions](
    [SapCode] [float] NOT NULL, 
    [DivisionShortcut] [varchar](10) NOT NULL, 
    [DivisionName] [varchar](max) NOT NULL, 
CONSTRAINT [PK_Divisions] PRIMARY KEY CLUSTERED 
(
    [SapCode] 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].[Divisions] ([SapCode], [DivisionShortcut], [DivisionName]) VALUES (30003143, N'PMOD', N'AB') 
INSERT [dbo].[Divisions] ([SapCode], [DivisionShortcut], [DivisionName]) VALUES (30003144, N'ESD', N'BC') 
INSERT [dbo].[Divisions] ([SapCode], [DivisionShortcut], [DivisionName]) VALUES (30003153, N'PESD', N'CD') 
INSERT [dbo].[Divisions] ([SapCode], [DivisionShortcut], [DivisionName]) VALUES (30003158, N'SSD', N'DE') 
INSERT [dbo].[Divisions] ([SapCode], [DivisionShortcut], [DivisionName]) VALUES (30012601, N'PEOD', N'EF') 
INSERT [dbo].[Divisions] ([SapCode], [DivisionShortcut], [DivisionName]) VALUES (30021812, N'PEMD', N'FG') 
INSERT [dbo].[Divisions] ([SapCode], [DivisionShortcut], [DivisionName]) VALUES (30021876, N'BAG', N'GH 
') 
INSERT [dbo].[Divisions] ([SapCode], [DivisionShortcut], [DivisionName]) VALUES (30023176, N'EPM', N'HI') 
/****** Object: Table [dbo].[Quiz] Script Date: 01/15/2012 12:29:48 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_PADDING ON 
GO 
CREATE TABLE [dbo].[Quiz](
    [QuizID] [int] IDENTITY(1,1) NOT NULL, 
    [Title] [varchar](max) NOT NULL, 
    [IsSent] [bit] NOT NULL, 
    [Description] [varchar](max) NULL, 
CONSTRAINT [PK_Quiz] PRIMARY KEY CLUSTERED 
(
    [QuizID] 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 
SET IDENTITY_INSERT [dbo].[Quiz] ON 
INSERT [dbo].[Quiz] ([QuizID], [Title], [IsSent], [Description]) VALUES (11, N'Safety Quiz 1', 0, N'General Safety Quiz') 
INSERT [dbo].[Quiz] ([QuizID], [Title], [IsSent], [Description]) VALUES (12, N'Safety Quiz 2', 0, N'General Safety Quiz') 
INSERT [dbo].[Quiz] ([QuizID], [Title], [IsSent], [Description]) VALUES (13, N'Safety Quiz 3', 0, N'TEST') 
INSERT [dbo].[Quiz] ([QuizID], [Title], [IsSent], [Description]) VALUES (14, N'Safety Quiz 4', 0, N'TEST') 
SET IDENTITY_INSERT [dbo].[Quiz] OFF 
/****** Object: Table [dbo].[employee] Script Date: 01/15/2012 12:29:48 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[employee](
    [Name] [nvarchar](max) NOT NULL, 
    [Username] [nvarchar](255) NOT NULL, 
    [JobTitle] [nvarchar](max) NOT NULL, 
    [BadgeNo] [float] NOT NULL, 
    [EmpOrgType] [float] NOT NULL, 
    [DivisionCode] [float] NOT NULL, 
CONSTRAINT [PK_employee] PRIMARY KEY CLUSTERED 
(
    [Username] 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].[employee] ([Name], [Username], [JobTitle], [BadgeNo], [EmpOrgType], [DivisionCode]) VALUES (N'John', N'AGUILEBS', N'Engineering Technician', 9545246, 2, 30012601) 
INSERT [dbo].[employee] ([Name], [Username], [JobTitle], [BadgeNo], [EmpOrgType], [DivisionCode]) VALUES (N'TED', N'ALKHATHI', N'Technical Clk Engrg', 8016951, 2, 30012601) 
INSERT [dbo].[employee] ([Name], [Username], [JobTitle], [BadgeNo], [EmpOrgType], [DivisionCode]) VALUES (N'Bel', N'ALMARHMS', N'Business Sys Analyst Iv', 289589, 1, 30012601) 
INSERT [dbo].[employee] ([Name], [Username], [JobTitle], [BadgeNo], [EmpOrgType], [DivisionCode]) VALUES (N'Tony', N'GRIGFW0A', N'Business Sys Analyst I', 9395990, 2, 30012601) 
INSERT [dbo].[employee] ([Name], [Username], [JobTitle], [BadgeNo], [EmpOrgType], [DivisionCode]) VALUES (N'Maria', N'KHWAILAM', N'Asst Engineer Ii', 431177, 2, 30012601) 
INSERT [dbo].[employee] ([Name], [Username], [JobTitle], [BadgeNo], [EmpOrgType], [DivisionCode]) VALUES (N'Johny', N'SALEMS0M', N'Business Sys Analyst Iii', 431163, 2, 30003143) 
INSERT [dbo].[employee] ([Name], [Username], [JobTitle], [BadgeNo], [EmpOrgType], [DivisionCode]) VALUES (N'Teddy', N'TOWAAH0A', N'Business Sys Analyst Iv', 8819001, 2, 30003143) 
INSERT [dbo].[employee] ([Name], [Username], [JobTitle], [BadgeNo], [EmpOrgType], [DivisionCode]) VALUES (N'Arnold', N'VILLAV0A', N'Asst Engineer I', 329398, 1, 30023176) 
/****** Object: Table [dbo].[UserQuiz] Script Date: 01/15/2012 12:29:48 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[UserQuiz](
    [UserQuizID] [int] IDENTITY(1,1) NOT NULL, 
    [QuizID] [int] NOT NULL, 
    [DateTimeComplete] [smalldatetime] NOT NULL, 
    [Score] [float] NOT NULL, 
    [Username] [nvarchar](255) NOT NULL, 
CONSTRAINT [PK_UserQuiz] PRIMARY KEY CLUSTERED 
(
    [UserQuizID] 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 IDENTITY_INSERT [dbo].[UserQuiz] ON 
INSERT [dbo].[UserQuiz] ([UserQuizID], [QuizID], [DateTimeComplete], [Score], [Username]) VALUES (21, 11, CAST(0x9FCD0345 AS SmallDateTime), 0, N'ALMARHMS') 
INSERT [dbo].[UserQuiz] ([UserQuizID], [QuizID], [DateTimeComplete], [Score], [Username]) VALUES (81, 11, CAST(0x9FD50288 AS SmallDateTime), 0, N'ALMARHMS') 
INSERT [dbo].[UserQuiz] ([UserQuizID], [QuizID], [DateTimeComplete], [Score], [Username]) VALUES (82, 11, CAST(0x9FC80000 AS SmallDateTime), 100, N'TOWAAH0A') 
INSERT [dbo].[UserQuiz] ([UserQuizID], [QuizID], [DateTimeComplete], [Score], [Username]) VALUES (83, 12, CAST(0x9FCE0000 AS SmallDateTime), 100, N'ALMARHMS') 
INSERT [dbo].[UserQuiz] ([UserQuizID], [QuizID], [DateTimeComplete], [Score], [Username]) VALUES (84, 11, CAST(0x9E790000 AS SmallDateTime), 50, N'VILLAV0A') 
INSERT [dbo].[UserQuiz] ([UserQuizID], [QuizID], [DateTimeComplete], [Score], [Username]) VALUES (85, 12, CAST(0x9FC20000 AS SmallDateTime), 100, N'ALMARHMS') 
SET IDENTITY_INSERT [dbo].[UserQuiz] OFF 
/****** Object: Default [DF_Quiz_IsSent] Script Date: 01/15/2012 12:29:48 ******/ 
ALTER TABLE [dbo].[Quiz] ADD CONSTRAINT [DF_Quiz_IsSent] DEFAULT ((0)) FOR [IsSent] 
GO 
/****** Object: ForeignKey [FK_employee_Divisions] Script Date: 01/15/2012 12:29:48 ******/ 
ALTER TABLE [dbo].[employee] WITH CHECK ADD CONSTRAINT [FK_employee_Divisions] FOREIGN KEY([DivisionCode]) 
REFERENCES [dbo].[Divisions] ([SapCode]) 
GO 
ALTER TABLE [dbo].[employee] CHECK CONSTRAINT [FK_employee_Divisions] 
GO 
/****** Object: ForeignKey [FK_UserQuiz_employee] Script Date: 01/15/2012 12:29:48 ******/ 
ALTER TABLE [dbo].[UserQuiz] WITH CHECK ADD CONSTRAINT [FK_UserQuiz_employee] FOREIGN KEY([Username]) 
REFERENCES [dbo].[employee] ([Username]) 
GO 
ALTER TABLE [dbo].[UserQuiz] CHECK CONSTRAINT [FK_UserQuiz_employee] 
GO 
/****** Object: ForeignKey [FK_UserQuiz_Quiz] Script Date: 01/15/2012 12:29:48 ******/ 
ALTER TABLE [dbo].[UserQuiz] WITH CHECK ADD CONSTRAINT [FK_UserQuiz_Quiz] FOREIGN KEY([QuizID]) 
REFERENCES [dbo].[Quiz] ([QuizID]) 
GO 
ALTER TABLE [dbo].[UserQuiz] CHECK CONSTRAINT [FK_UserQuiz_Quiz] 
GO 

答えて

0
SELECT 
    dbo.Divisions.DivisionName, 
    DATENAME(Month, dbo.UserQuiz.DateTimeComplete) AS MONTH, 
    COUNT(DISTINCT dbo.UserQuiz.QuizId)*COUNT(DISTINCT dbo.employee.UserName)*100/((SELECT COUNT(*) FROM dbo.Quiz)*COUNT(DISTINCT dbo.employee.UserName)) AS [Percent Completion] 
FROM dbo.employee 
JOIN dbo.Divisions ON dbo.employee.DivisionCode = dbo.Divisions.SapCode 
LEFT JOIN dbo.UserQuiz ON dbo.UserQuiz.Username = dbo.employee.Username 
WHERE 
    dbo.UserQuiz.DateTimeComplete IS NOT NULL 
AND DATEPART(MONTH, dbo.UserQuiz.DateTimeComplete) = 12 
GROUP BY 
    dbo.Divisions.DivisionName, 
    DATENAME(Month, dbo.UserQuiz.DateTimeComplete) 
関連する問題