DECLARE @Client TABLE (ClientID INT, Expected INT)DECLARE @JobHis TABLE (ClientID INT, JobInfo INT)INSERT INTO @Client VALUES (1,1),(2,2),(3,3),(4,4),(5,5)INSERT INTO @JobHis VALUES (1,100),(2,100),(2,200),(3,100),(3,200),(4,100),(4,200),(4,300),(4,400),(5,100),(5,200),(5,300),(5,400),(5,500)SELECT t1.ClientID, t1.Expected, COUNT(t2.ClientID) AS Actual, CASE WHEN t1.Expected > COUNT(t2.ClientID) THEN 'Error, Actual less than Expected' ELSE 'OK, Expected and Actual match' END AS StatusFROM @Client t1INNER JOIN @JobHis t2 ON t1.ClientID = t2.ClientIDGROUP BY t1.ClientID, t1.Expected
CREATE TABLE [dbo].[Client]([clientID] [int] NOT NULL,[expected] [int] NOT NULL,CONSTRAINT [PK_Client] PRIMARY KEY CLUSTERED ([clientID] 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 jobhis tableCREATE TABLE [dbo].[JobHis]([JobHistID] [int] IDENTITY(1,1) NOT NULL,[clientid] [int] NOT NULL,[jobinfo] [varchar](50) NOT NULL,CONSTRAINT [PK_JobHis] PRIMARY KEY CLUSTERED ([JobHistID] 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 test client into client tableINSERT INTO [dbo].[Client]([clientID],[expected])values(1,1),(2,2),(3,4),(4,2),(5,5),(6,2),(7,2),(8,5),(9,0),(10,3)GO--insert job results into jobhist table to compare against expected valueINSERT INTO [dbo].[JobHis]([clientID],[jobinfo])values(1,'test job successful'),(2,'test job successful'),(2,'test job successful'),(4,'test job successful'),(4,'test job successful'),(6,'test job successful'),(6,'test job successful'),(7,'test job successful'),(7,'test job successful'),(10,'test job successful'),(10,'test job successful'),(10,'test job successful')GOselect *from dbo.Client c left outer join dbo.JobHis j on (c.clientID = j.clientid);goselect c.clientID, c.expected, ca.JobCount, case when c.expected = ca.JobCount then 'No ' else '' end + 'Variance' as Resultsfrom dbo.Client c cross apply (select count(*) from dbo.JobHis jh where jh.clientid = c.clientID) ca(JobCount);godrop table dbo.Client;drop table dbo.JobHis;go