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')