Sql 要获得组计数是一种复杂的方法,请尝试在(按wojob.LabourID分区)上使用count(*)。@dnoeth子查询应该只返回一个结果/列。。。所以动态分组会得到不止一个结果。太棒了!工作起来很有魅力。谢谢你的帮助。 USE [Maint5k] GO
Sql 要获得组计数是一种复杂的方法,请尝试在(按wojob.LabourID分区)上使用count(*)。@dnoeth子查询应该只返回一个结果/列。。。所以动态分组会得到不止一个结果。太棒了!工作起来很有魅力。谢谢你的帮助。 USE [Maint5k] GO ,sql,sql-server,count,group-by,subquery,Sql,Sql Server,Count,Group By,Subquery,要获得组计数是一种复杂的方法,请尝试在(按wojob.LabourID分区)上使用count(*)。@dnoeth子查询应该只返回一个结果/列。。。所以动态分组会得到不止一个结果。太棒了!工作起来很有魅力。谢谢你的帮助。 USE [Maint5k] GO /****** Object: StoredProcedure [dbo].[PMs_Past_Due_Count] Script Date: 3/21/2017 11:08:52 AM ******/ SET ANSI_NULLS O
要获得组计数是一种复杂的方法,请尝试在(按wojob.LabourID分区)上使用
count(*)
。@dnoeth子查询应该只返回一个结果/列。。。所以动态分组会得到不止一个结果。太棒了!工作起来很有魅力。谢谢你的帮助。
USE [Maint5k]
GO
/****** Object: StoredProcedure [dbo].[PMs_Past_Due_Count] Script Date: 3/21/2017 11:08:52 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Hicks,Clayton>
-- Create date: <2017,03,06>
-- Description: <Pulls open Maintennace Reactive Work Orders for the current week>
-- =============================================
ALTER PROCEDURE [dbo].[PMs_Past_Due_Count]
as
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT
woJob.JobID
,woJob.FullDescription
,woJob.DueDate
,syJobType.Code AS [syJobType Code]
,syJobStatus.Code AS [syJobStatus Code]
,emLabour.LabourFirstName AS [First Name]
,emLabour.LabourSurName AS [Last Name]
,wojob.LabourID
,(Select count(wojob.LabourID) as 'Count_LabourID' from woJob
INNER JOIN syJobType
ON woJob.JobTypeID = syJobType.JobTypeID
INNER JOIN syJobStatus
ON woJob.JobStatusID = syJobStatus.JobStatusID
INNER JOIN [Maint5k].[dbo].[emLabour]
ON woJob.LabourID = emLabour.LabourID
Where syJobType.Code = 'PM' and
DueDate < GETDATE() and
(syjobstatus.Code = 'Open' or
syJobStatus.Code = 'SCHEDULED')
group by wojob.LabourID) as CountLabourIDs
FROM
woJob
INNER JOIN syJobType
ON woJob.JobTypeID = syJobType.JobTypeID
INNER JOIN syJobStatus
ON woJob.JobStatusID = syJobStatus.JobStatusID
INNER JOIN [Maint5k].[dbo].[emLabour]
ON woJob.LabourID = emLabour.LabourID
Where syJobType.Code = 'PM' and
DueDate < GETDATE() and
(syjobstatus.Code = 'Open' or
syJobStatus.Code = 'SCHEDULED')
'
SELECT
wojob1.JobID
,wojob1.FullDescription
,wojob1.DueDate
,syJobType.Code AS [syJobType Code]
,syJobStatus.Code AS [syJobStatus Code]
,emLabour.LabourFirstName AS [First Name]
,emLabour.LabourSurName AS [Last Name]
,wojob1.LabourID
,(Select count(1) from woJob -- replaced
INNER JOIN syJobType s1 --- alias
ON woJob.JobTypeID = s1.JobTypeID
INNER JOIN syJobStatus s2 --- alias
ON woJob.JobStatusID = s2.JobStatusID
INNER JOIN [Maint5k].[dbo].[emLabour] em --- alias
ON woJob.LabourID = em.LabourID
and wojob1.LabourID = woJob.LabourID --added
Where syJobType.Code = 'PM' and
DueDate < GETDATE() and
(syjobstatus.Code = 'Open' or
syJobStatus.Code = 'SCHEDULED')
-- group by wojob.LabourID -- removed
) as CountLabourIDs
FROM
woJob as wojob1 -- alias
INNER JOIN syJobType
ON wojob1.JobTypeID = syJobType.JobTypeID
INNER JOIN syJobStatus
ON wojob1.JobStatusID = syJobStatus.JobStatusID
INNER JOIN [Maint5k].[dbo].[emLabour]
ON wojob1.LabourID = emLabour.LabourID
Where syJobType.Code = 'PM' and
DueDate < GETDATE() and
(syjobstatus.Code = 'Open' or
syJobStatus.Code = 'SCHEDULED')
-- Insert statements for procedure here
With My_cte as (
Select wojob.LabourID,count(wojob.LabourID) as Count_LabourID
FROM woJob
INNER JOIN syJobType
ON woJob.JobTypeID = syJobType.JobTypeID
INNER JOIN syJobStatus
ON woJob.JobStatusID = syJobStatus.JobStatusID
INNER JOIN [Maint5k].[dbo].[emLabour]
ON woJob.LabourID = emLabour.LabourID
Where syJobType.Code = 'PM' and
DueDate < GETDATE() and
(syjobstatus.Code = 'Open' or
syJobStatus.Code = 'SCHEDULED')
group by wojob.LabourID
)
SELECT
woJob.JobID
,woJob.FullDescription
,woJob.DueDate
,syJobType.Code AS [syJobType Code]
,syJobStatus.Code AS [syJobStatus Code]
,emLabour.LabourFirstName AS [First Name]
,emLabour.LabourSurName AS [Last Name]
,wojob.LabourID
,Count_LabourID
FROM
woJob
INNER JOIN syJobType
ON woJob.JobTypeID = syJobType.JobTypeID
INNER JOIN syJobStatus
ON woJob.JobStatusID = syJobStatus.JobStatusID
INNER JOIN [Maint5k].[dbo].[emLabour]
ON woJob.LabourID = emLabour.LabourID
LEFT JOIN My_cte e on wojob.LabourID = e.wojob.LabourID
Where syJobType.Code = 'PM' and
DueDate < GETDATE() and
(syjobstatus.Code = 'Open' or
syJobStatus.Code = 'SCHEDULED')
SELECT
woJob.JobID
,woJob.FullDescription
,woJob.DueDate
,syJobType.Code AS [syJobType Code]
,syJobStatus.Code AS [syJobStatus Code]
,emLabour.LabourFirstName AS [First Name]
,emLabour.LabourSurName AS [Last Name]
,wojob.LabourID
,count(*) over (partition by wojob.LabourID) as CountLabourIDs
FROM
woJob
INNER JOIN syJobType
ON woJob.JobTypeID = syJobType.JobTypeID
INNER JOIN syJobStatus
ON woJob.JobStatusID = syJobStatus.JobStatusID
INNER JOIN [Maint5k].[dbo].[emLabour]
ON woJob.LabourID = emLabour.LabourID
Where syJobType.Code = 'PM' and
DueDate < GETDATE() and
(syjobstatus.Code = 'Open' or
syJobStatus.Code = 'SCHEDULED')