왜 내가 vb.net 코드에서 SQL 문을 SQL Server에서 다른 결과를 제공하는 해결하기 위해 노력하고있어. 내 코드 :SQL 문에서 여러 계산 - 다른 결과
strsql = "SELECT DISTINCT DateName(mm,DATEADD(mm,lgdatm,-1)) as lgMon, Avi, SUM((ProcElaps/60)/Emplo) as Util, Effi, SUM(((ProcElaps/60) * Avi)/Emplo) as DayProd, ProcElaps, ProcCount, NonProcCount FROM " & _
"(SELECT DISTINCT lgdatm, Emplo, SUM((Emplo - (NonProcElaps/60))/Emplo) as Avi, SUM((ProcElaps/60)/(Emplo- (NonProcElaps/60))) as Effi, ProcElaps, ProcCount, NonProcCount FROM " & _
"(SELECT DISTINCT lgdatm, SUM(460 * lgdat * EmpCount) as Emplo, NonProcElaps, ProcElaps, ProcCount, NonProcCount FROM " & _
"(SELECT DISTINCT MONTH(LogDate) AS lgdatm, " & _
"Count(DISTINCT " & _
"CASE WHEN (ActivityCategory = @ActivAc) AND (MONTH([LogDate]) = @LGDat) THEN Enumber ELSE '0' END) AS EmpCount, " & _
"Count(DISTINCT " & _
"CASE WHEN (ActivityCategory = @ActivAc) AND (MONTH([LogDate]) = @LGDat) THEN LogDate ELSE LogDate END) lgdat, " & _
"Count(" & _
"CASE WHEN (ActivityCategory = @ActivAc) AND (MONTH([LogDate]) = @LGDat) THEN FirstActivity ELSE '0' END) AS ProcCount, " & _
"Count(" & _
"CASE WHEN (ActivityCategory = @ActivAcnon) AND (MONTH([LogDate]) = @LGDat) THEN FirstActivity ELSE '0' END) AS NonProcCount, " & _
"SUM(" & _
"CASE WHEN (ActivityCategory = @ActivAc) AND (MONTH([LogDate]) = @LGDat) THEN Elapsed ELSE '0' END) ProcElaps, " & _
"SUM(" & _
"CASE WHEN (ActivityCategory = @ActivAcnon) AND (MONTH([LogDate]) = @LGDat) THEN Elapsed ELSE '0' END) NonProcElaps " & _
"FROM tblMain WHERE MONTH([LogDate]) = @LGDat " & _
"GROUP BY MONTH(LogDate)) AS T1 " & _
"Group By lgdatm, EmpCount, NonProcElaps, ProcElaps, ProcCount, NonProcCount) AS T2 " & _
"Group BY lgdatm, Emplo, ProcElaps, ProcCount, NonProcCount) As T3 " & _
"Group BY lgdatm, Avi, Effi, ProcElaps, ProcCount, NonProcCount Order By DayProd, Util, Avi, Effi"
Dim da As New SqlDataAdapter(strsql, cnn)
Dim ds As New DataSet()
da.SelectCommand.Parameters.AddWithValue("@ActivAc", proc)
da.SelectCommand.Parameters.AddWithValue("@ActivAcnon", nonproc)
da.SelectCommand.Parameters.AddWithValue("@LGDat", Mon)
da.Fill(ds, "Productivity")
txtDayProductivity.Text = Format(ds.Tables(0).Rows(0)(4).ToString(), "Percent")
txtAvailabilityTeam.Text = Format(ds.Tables(0).Rows(0)(1).ToString(), "Percent")
txtEfficiencyTeam.Text = Format(ds.Tables(0).Rows(0)(3).ToString(), "Percent")
txtUtilizationTeam.Text = Format(ds.Tables(0).Rows(0)(2).ToString(), "Percent")
txtTotLogg.Text = (ds.Tables(0).Rows(0)(5).ToString())/60
txtTotalTimeLogged.Text = (CDec(txtTotLogg.Text).ToString("N2")) & " mins"
txtAllProcess.Text = ds.Tables(0).Rows(0)(6).ToString()
txtAllNonProcess.Text = ds.Tables(0).Rows(0)(7).ToString()
내가 별도의 쿼리에 각 스레드를 추가 할 때, 결과는이 코드의 집행 중에 얻을 것과 상당히 다르다. CASE 때문에 그것이라고 생각합니까, 아니면 CASE를 잘못 사용하고 있습니다.
는 ("@LGDat"월은) - 월 현재의 달 (수) ("@ActivAc", PROC) - 문자열 '프로세스' ("@ActivAcnon", nonproc) - 문자열 '비 공정'도움 주셔서 감사합니다.
크기를 줄이거 나 시도 할 수 있습니까? 문제를 분리하여 해결할 수 있습니다. –
시도해 주셔서 감사합니다. – user2678787