2017-01-23 3 views
0

보고서 작성기에서 이상한 동작이 있습니다. 보고서 작성기를 사용하기 전에 SQL Studio에서 기존 데이터 집합과 코드를 테스트하고 있습니다. 보고서 작성기 쿼리 동작을 이해할 수 없습니다.

SELECT 
     v_Collection_Alias.Name as CollectionName, 
     v_Package_Alias.Name as SoftwareName, 
     'Package' as ApplicationType, 
     NumberSuccessTable='NumberSuccessTable', sum(case when stat.LastState in (-1,13) then 1 else 0 end) as NumberSuccess, 
     NumberInProgressTable='NumberInProgress', sum(case when stat.LastState in (8,9) then 1 else 0 end) as NumberInProgress, 
     NumberUnknownTable='NumberUnknown', sum(case when stat.LastState in (0) then 1 else 0 end) as Unknown, 
     NumberErrorTable='NumberError', sum(case when stat.LastState in (11) then 1 else 0 end) as NumberError, 
     NumberOtherTable='NumberOther', sum(case when stat.LastState in (10) then 1 else 0 end) as NumberOther, 
     '' as LastModifiedby, 
     '' as Version, 
     v_Advertisement_Alias.CollectionID as CollectionID, 
     v_Advertisement_Alias.AdvertisementID as DeploymentID, 
     '' as CI_ID, 
     '' as DeploymentTime, 
     v_Advertisement_Alias.PresentTime as ModificationTime, 
     '' as AssignmentID 

FROM fn_rbac_Advertisement(@UserSIDs) v_Advertisement_Alias 
JOIN fn_rbac_ClientAdvertisementStatus(@UserSIDs) stat on v_Advertisement_Alias.AdvertisementID = stat.AdvertisementID 
INNER JOIN fn_rbac_Package2(@UserSIDs) v_Package_Alias ON v_Advertisement_Alias.PackageID = v_Package_Alias.PackageID 
INNER JOIN fn_rbac_Collection(@UserSIDs) v_Collection_Alias ON v_Advertisement_Alias.CollectionID = v_Collection_Alias.CollectionID 

이 나에게 오류 메시지를 표시한다

fn_rbac_Advertisement.Name GROUP BY 절을 필요로하기 때문에 : 그리고 나는 내가 다음이 작동하지 않는 이유를 이해하지 않기 때문에 잃었어요.

SELECT 
    v_Collection_Alias.Name as CollectionName, 
    v_Package_Alias.Name as SoftwareName, 
    '' as ApplicationType, 
    '' as NumberSuccess, 
    '' as NumberInProgress, 
    '' as NumberUnknown, 
     '' as NumberErrors, 
     '' as NumberOther, 
    '' as LastModifiedby, 
    '' as Version, 
    v_Advertisement_Alias.CollectionID as CollectionID, 
    v_Advertisement_Alias.AdvertisementID as DeploymentID, 
    '' as CI_ID, 
    '' as DeploymentTime, 
    v_Advertisement_Alias.PresentTime as ModificationTime, 
    '' as AssignmentID, 
    '' as ApplicationType 


FROM fn_rbac_Advertisement(@UserSIDs) v_Advertisement_Alias 
INNER JOIN fn_rbac_Package2(@UserSIDs) v_Package_Alias ON v_Advertisement_Alias.PackageID = v_Package_Alias.PackageID 
INNER JOIN fn_rbac_Collection(@UserSIDs) v_Collection_Alias ON v_Advertisement_Alias.CollectionID = v_Collection_Alias.CollectionID 

을 다음과 같은 반환 날 나는 SQL Studio에서 원하는 : 다음 반면 제대로 원래 보고서에서 일하고 어떤 도움들에 대한

Select 
NumberSuccessTable='NumberSuccessTable', sum(case when stat.LastState in (-1,13) then 1 else 0 end), 
NumberInProgressTable='NumberInProgress', sum(case when stat.LastState in (8,9) then 1 else 0 end), 
NumberUnknownTable='NumberUnknown', sum(case when stat.LastState in (0) then 1 else 0 end) AS NumberU, 
NumberErrorTable='NumberError', sum(case when stat.LastState in (11) then 1 else 0 end) AS NumberError, 
NumberOtherTable='NumberOther', sum(case when stat.LastState in (10) then 1 else 0 end) as NumberOther 
From v_ClientAdvertisementStatus stat 

감사합니다! :)

답변

1

첫 번째 쿼리 : 당신은 SUM과 같은 집계 함수를 사용할 때

당신은 집계 함수를하지 마십시오 모든 컬럼에 GROUP BY를 할 필요가있다.

두 번째 쿼리 : 당신은 당신이 당신에 의해 합계와 그룹을 처리 할 수있는 GROUP BY 및 보고서 빌더를 사용하여 필요 없다 그 때문에 당신의 선택에 집계 함수를 해달라고 때문에

이 작동합니다.

세 번째 쿼리는 : 당신은 당신이 GROUP BY에 필요가없는, 그래서 모든 열에 집계 함수를 가지고 있기 때문에

이 쿼리가 작동합니다.

항상 논리적 인 질의 처리 순서는 다음과 같습니다 기억

1.FROM 2.WHERE 3.GROUP 5.SELECT 6.ORDER 그래서 당신의

BY 4.HAVING 에 의해 GROUP BY는 그 이유 때문에 SELECT 이전에 발생합니다. 왜냐하면 당신이 그룹화 할 때 그 컬럼이 아직 존재하지 않기 때문에 group by 절에 ''를 포함 시키십시오. 그래서 오류가 발생합니다.

1

당신은 예를 들어 집계되지 않은 모든 컬럼에 GROUP BY 절을 적용해야합니다 (예 : SUM로) 집계 함수를 사용하는 경우 : 당신이 긴을 유지하지 않으려면,

GROUP BY v_Collection_Alias.Name, 
    v_Package_Alias.Name, 
    v_Advertisement_Alias.CollectionID as CollectionID, 
    v_Advertisement_Alias.AdvertisementID as DeploymentID, 
    v_Advertisement_Alias.PresentTime as ModificationTime 

또는 GROUP BY 절을 사용하면 SELECT 문에서 SUM 함수를 제거하고 보고서 작성기에서 적절한 그룹화를 통해 보고서가 집계를 처리하도록 할 수 있습니다.

+0

안녕하세요, 알지 못했습니다! 정보에 대한 Thx 방식으로 난 여전히 작동하도록 할 수 없습니다 :(나는 당신처럼 전체 줄에 의해 그룹 또는 "잘못된 열 이름"나를 반환하는 별칭을했습니다. 변수를 여기에 문제가 될 수 없습니다. ? –

+0

죄송합니다. 점심 시간이 끝나면 잘라내어 붙여 넣습니다. 그룹의 별명을 바꾸거나 더미 필드를 잃어 버리자. –

관련 문제