에 의해 나는 다음과 같은 열이있는 테이블이 있습니다SQL 서버 : 그룹은 계산 된 열
내가 그 기간에 대한 모든 질문에 대한 평균 준수 비율을 알고 싶어요. 쿼리의 매개 변수로 시작 날짜와 종료 날짜를 전달합니다.
그래서 (이 개 내가 @StartDate
을 전달하고 기간 (예 : 1/6/17)을하고 @EndDate
(예 : 30/6/17) 첫 번째 기간과 @StartDate2
(1/10/17) 및 @EndDate2
원하는 경우 31/10/17).
내 SQL 쿼리는 다음과 같습니다
이 SQL 쿼리에서;WITH tmpTab AS
(
SELECT
question,
SUM((CASE WHEN AnswerValue = 1 THEN 1 ELSE 0 END)) Met,
SUM((CASE WHEN AnswerValue = 3 THEN 1 ELSE 0 END)) NA,
SUM((CASE WHEN (ISNULL(AnswerValue,3) <> 3) THEN 1 ELSE 0 END)) MetNotMet,
DATENAME(DAY, @StartDate) + ' ' + DATENAME(MONTH, @StartDate) + ' ' +
DATENAME(YEAR, @StartDate) + ' To ' + DATENAME(DAY,@EndDate) + ' ' +
DATENAME(MONTH, @EndDate) + ' ' + DATENAME(YEAR, @EndDate) AS RepMonthAndYear
FROM
tableA
WHERE
startdate >= @StartDate AND endate <= @EndDate
GROUP BY
Question
UNION ALL
SELECT
question,
SUM((CASE WHEN AnswerValue = 1 THEN 1 ELSE 0 END)) Met,
SUM((CASE WHEN AnswerValue = 3 THEN 1 ELSE 0 END)) NA,
SUM((CASE WHEN (ISNULL(AnswerValue,3) <> 3) THEN 1 ELSE 0 END)) MetNotMet,
DATENAME(DAY,@StartDate2)+' '+DATENAME(MONTH,@StartDate2)+' '+DATENAME(YEAR,@StartDate2)+ ' To ' + DATENAME(DAY,@EndDate2)+' '+DATENAME(MONTH,@EndDate2)+' '+DATENAME(YEAR,@EndDate2) AS RepMonthAndYear
FROM
tableA
WHERE
startdate >= @StartDate2 AND endate <= @EndDate2
GROUP BY
Question
)
SELECT
Question, Met, NA, MetNotMet,
CASE WHEN (Met) = 0 THEN 0 ELSE ROUND(((CONVERT(FLOAT,(Met))/(MetNotMet))* 100),4) END as CompRate
FROM
tmpTab
, 나는 그것이 계산 된 열이기 때문에 내가 할 수없는 또한 RepMonthAndYear
열을 기준으로 그룹이 필요합니다. "잘못된 열"오류가 발생합니다.
그리고이 GROUP BY
절을 사용하는 경우 :
Each GROUP BY expression must contain at least one column that is not an outer reference.
가 어떻게이 문제를 해결할 수 :
(DATENAME(DAY,@StartDate2)+' '+DATENAME(MONTH,@StartDate2)+' '+DATENAME(YEAR,@StartDate2)+ ' To ' + DATENAME(DAY,@EndDate2)+' '+DATENAME(MONTH,@EndDate2)+' '+DATENAME(YEAR,@EndDate2))
을 나는이 오류가?
특정 기간별 평균 요율 그룹을 알 수있는 다른 방법이 있습니까?
입력 할 때 예상되는 결과를 제공 할 수 있습니까? –
변수로만 그룹화하려고하면 아무 것도하지 않겠습니다. –
계산 된 열'RepMonthAndYear'는 ** const **이므로 그룹화 할 필요가 없습니다. 'GROUP BY question' 만 사용하십시오. –