Click here to Skip to main content
15,890,973 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Previously i posted i query i modified that query this way now result getting with in 2sec but getting zero value what is wrong in this please help me out

SQL
USE [INVATTENDENCEL]
GO
/****** Object:  StoredProcedure [dbo].[SP_GET_EXTRA_HOURS_WORKED_NEW]    Script Date: 02/12/2016 09:19:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

--EXEC [SP_GET_EXTRA_HOURS_WORKED_NN]29,'Mechanical CHP Maintenance','2016-02-11'

ALTER proc [dbo].[SP_GET_EXTRA_HOURS_WORKED_NNN]  
@SITE_ID INT,  
@DEPT_NAME VARCHAR(100),  
@TO_DATE DATETIME  
AS  
declare @d1 int,@d2 int,@d3 int,@d4 int,@d5 int,@m1 int,@m2 int,@m3 int,@m4 int,@m5 int,@y1 int,@y2 int,@y3 int,@y4 int,@y5 int  
  
BEGIN  
set @d1=(select SUBSTRING(CONVERT(VARCHAR(8), DATEadd(DD,-4,@TO_DATE), 5),0,3))  
set @m1=(select SUBSTRING(CONVERT(VARCHAR(8),DATEadd(DD,-4,@TO_DATE), 5),4,2))  
set @y1=(select SUBSTRING(CONVERT(VARCHAR(8), DATEadd(DD,-4,@TO_DATE), 5),7,2))  
  
set @d2=(select SUBSTRING(CONVERT(VARCHAR(8), DATEadd(DD,-3,@TO_DATE), 5),0,3))  
set @m2=(select SUBSTRING(CONVERT(VARCHAR(8),DATEadd(DD,-3,@TO_DATE), 5),4,2))  
set @y2=(select SUBSTRING(CONVERT(VARCHAR(8), DATEadd(DD,-3,@TO_DATE), 5),7,2))  
  
set @d3=(select SUBSTRING(CONVERT(VARCHAR(8), DATEadd(DD,-2,@TO_DATE), 5),0,3))  
set @m3=(select SUBSTRING(CONVERT(VARCHAR(8),DATEadd(DD,-2,@TO_DATE), 5),4,2))  
set @y3=(select SUBSTRING(CONVERT(VARCHAR(8), DATEadd(DD,-2,@TO_DATE), 5),7,2))  
  
set @d4=(select SUBSTRING(CONVERT(VARCHAR(8), DATEadd(DD,-1,@TO_DATE), 5),0,3))  
set @m4=(select SUBSTRING(CONVERT(VARCHAR(8),DATEadd(DD,-1,@TO_DATE), 5),4,2))  
set @y4=(select SUBSTRING(CONVERT(VARCHAR(8), DATEadd(DD,-1,@TO_DATE), 5),7,2))  
  
set @d5=(select SUBSTRING(CONVERT(VARCHAR(8), @TO_DATE, 5),0,3))  
set @m5=(select SUBSTRING(CONVERT(VARCHAR(8), @TO_DATE, 5),4,2))  
set @y5=(select SUBSTRING(CONVERT(VARCHAR(8), @TO_DATE, 5),7,2))  
  
  create table #temp1(
EMP_CODE VARCHAR(1000),
EMP_NAME CHAR(50),G INT,F INT,S INT,T INT,G1 INT,F1 INT,S1 INT,T1 INT)
  create table TMP1(
EMP_CODE VARCHAR(1000),
EMP_NAME CHAR(50),G INT,F INT,S INT,T INT,G1 INT,F1 INT,S1 INT,T1 INT)
  create table #temp2(
EMP_CODE VARCHAR(1000),
EMP_NAME CHAR(50),G INT,F INT,S INT,T INT,G1 INT,F1 INT,S1 INT,T1 INT)


INSERT INTO #temp1 (EMP_CODE,EMP_NAME,G,F,S,T)

 select distinct emp.EMP_CODE,emp.EMP_NAME,
  case when  et.DAY=@d1 and et.MONTH=@m1 and et.YEAR=@y1 and et.EMP_ID=emp.EMP_CODE and et.site_id=@SITE_ID then et.GENERAL_SHIFT  else 0 end as G,  
  case when  et.DAY=@d1 and et.MONTH=@m1 and et.YEAR=@y1 and et.EMP_ID=emp.EMP_CODE and et.site_id=@SITE_ID then et.FIRST_SHIFT else 0 end as F,
  case when  et.DAY=@d1 and et.MONTH=@m1 and et.YEAR=@y1 and et.EMP_ID=emp.EMP_CODE and et.site_id=@SITE_ID then et.SECOND_SHIFT else 0 end as S,
  case when  et.DAY=@d1 and et.MONTH=@m1 and et.YEAR=@y1 and et.EMP_ID=emp.EMP_CODE and et.site_id=@SITE_ID then et.THIRD_SHIFT else 0 end as T
from dbo.EMP_FPONM_EMPLOYEE_INFORMATION emp
    left join dbo.EMP_FPONM_EMP_TIME_SHEET et  on emp.EMP_CODE=et.EMP_ID 
  where EMP.SITE_ID=@SITE_ID AND EMP.[STATUS]='Present' AND emp.DEPT_NAME=@DEPT_NAME 
  
 
  INSERT INTO #temp2 (EMP_CODE,EMP_NAME,G1,F1,S1,T1)
 select   distinct emp.EMP_CODE,emp.EMP_NAME,
 case when  et.DAY=@d2 and et.MONTH=@m2 and et.YEAR=@y2 and et.EMP_ID=emp.EMP_CODE and et.site_id=@SITE_ID then et.GENERAL_SHIFT else 0 end as G1,  
  case when  et.DAY=@d2 and et.MONTH=@m2 and et.YEAR=@y2 and et.EMP_ID=emp.EMP_CODE and et.site_id=@SITE_ID then et.FIRST_SHIFT else 0 end as F1,  
  case when  et.DAY=@d2 and et.MONTH=@m2 and et.YEAR=@y2 and et.EMP_ID=emp.EMP_CODE and et.site_id=@SITE_ID then et.SECOND_SHIFT else 0 end as S1,  
  case when  et.DAY=@d2 and et.MONTH=@m2 and et.YEAR=@y2 and et.EMP_ID=emp.EMP_CODE and et.site_id=@SITE_ID then et.THIRD_SHIFT else 0 end as T1
from dbo.EMP_FPONM_EMPLOYEE_INFORMATION emp
   left join dbo.EMP_FPONM_EMP_TIME_SHEET et  on emp.EMP_CODE=et.EMP_ID 
      where EMP.SITE_ID=@SITE_ID AND EMP.[STATUS]='Present' AND emp.DEPT_NAME=@DEPT_NAME

  update T1 set T1.G1=isnull(T2.G1,0),T1.F1=isnull(T2.F1,0),T1.S1=isnull(T2.S1,0),T1.T1=isnull(T2.T1,0)
               
  FROM #temp1 T1  JOIN #temp2 T2  ON T1.EMP_CODE=T2.EMP_CODE 
  insert into TMP1 select * from #temp1
  
  update TMP1 set G1=isnull(G1,0),F1=isnull(F1,0),S1=isnull(S1,0),T1=isnull(T1,0)

  SELECT * FROM TMP1
  
  drop table TMP1
  drop table #temp1
  drop table #temp2
  
END  

0 value

What I have tried:

Previously i posted i query i modified that query this way now result getting with in 2sec but getting zero value what is wrong in this please help me out
Posted
Updated 11-Feb-16 18:21pm
v2
Comments
Er. Puneet Goel 12-Feb-16 2:22am    
Can you provide details about about your DB size and schema ?
durga63 12-Feb-16 3:25am    
DB SIZE IS 1GB,ACTUALLY I HAVE PROBLEM WITH CASE STATEMENTS ITS SELECTED 4 ROWS BUT I NEED SINGLE ROW

1 solution

I am not SQL specialist, but I have the feeling that your DB schema is wrong.
You need to use a Date field rather than et.DAY, et.MONTH and et.YEAR.
You should also have a look at what is an SQL pivot.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900