2011-12-08 2 views
0

mysql에서 sql 서버로 변환 중입니다. 선택 목록 오류에서 SQL 저장 프로 시저 오류가 발생했습니다

선별 된 저장된 프로 시저를 변환하는 동안

,

CREATE PROCEDURE selPropertyByAcntID 
(
@in_acntID INT 
) 
AS 
SELECT * 
    , SUM(CASE 
         WHEN u.prop_id IS NOT NULL THEN 1 
         ELSE 0 
       END) AS UnitCount 
FROM 
    prop_details d 
INNER JOIN 
    acnt_property a 
ON 
    d.prop_id = a.prop_id 
LEFT JOIN 
    unit_details u 
ON 
    d.prop_id = u.prop_id 
WHERE 
    a.group_id = @in_acntID 
GROUP BY 
    d.prop_id; 
그것은 다음과 같은 오류 던지고있다

:이 때문에 8120 심각도 16 열 'prop_details.prop_title'선택 목록에서 유효하지 않습니다

오류 집계 함수 나 GROUP BY 절의 컨테이너가 아닙니다.

이상한 - mysql 환경에서 정확하게 동일한 저장 프로 시저가 작동합니다.

이 문제에 대한 도움을 주시면 감사하겠습니다. SQL 서버에서

답변

3

및 막 당신이 GROUP BY 목록 또는 집계에 싸여들에 포함 된 SELECT 목록 항목에 포함 만 할 수 MySQL을 제외한 모든 RDBMS .

그래서, 문제가 * 없애 해결하려면 테이블 da에서 필요한 컬럼 만 선택하고 SQL 서버와의 GROUP BY

0

에이 목록을 추가 (나는 사실 대부분의 RDBMS 생각 ...) 문에 GROUP BY이있는 경우 그룹화 함수와 함께 그룹화 열만 포함 할 수 있습니다.

SELECT ColumnA, SUM(ColumnB) TotalCount 
FROM Table 
GROUP BY ColumnA; 

을하지만이없는 것 : 예를 들어,이 일 것

SELECT ColumnA, ColumnC, ColumnD, SUM(ColumnB) TotalCount 
FROM Table 
GROUP BY ColumnA; 

ColumnC 때문에 ColumnD 그룹화되지 않습니다.

0

당신이 *을 선택했지만 prop_id 만 그룹화하십시오. *d.prop_id으로 변경하면 잘됩니다. 다른 열이 필요하면 선택 및 그룹 기준으로 지정하십시오.

1

질문과 관련없는 메모입니다. 이 부분 :

, SUM(CASE 
       WHEN u.prop_id IS NOT NULL THEN 1 
       ELSE 0 
     END) AS UnitCount 

을 단순화 할 수 있습니다 경우에도 COUNT = 0 설정 전체 데이터를

, COUNT(u.prop_id) AS UnitCount 
+0

안녕 ypercube, 내가 그 시도하지만 대 수, 세트 단일 데이터를 반환했습니다. – Rick