2017-03-27 8 views
0

두 번째 쿼리의 계산 결과를 첫 번째 테이블을 쿼리하고이 하위 쿼리를 첫 번째 테이블 결과의 ID와 연결하는 결과 집합에 추가하고 싶습니다. 이 간단한 코드는 다음과 같이 설명합니다.두 번째 테이블에서 count에 대한 SQL Server 하위 쿼리

Select 
    ID_Field_Table1, 
    (Select Count(x) 
    From Table2 
    Where ID_Field_Table2 = ID_Field_Table1) As mycount 
From Table1 

올바른 구문은 무엇입니까? 감사합니다.

이 코드는 단순화되었지만 구성은 같습니다. 내 DB에서 ID_Field_Table2와 ID_Field_Table1은 같은 이름을 가지고 있습니다 (ID_Field라고합시다). 이 동일한 이름을 사용하면 SubQuery는 "... ID_Field = ID_Field .."와 같이 나타나며 쿼리를 연결하지 않기 때문에 항상 Reslut을 반환합니다 ("Select a Where x = x"는 표 2).

Select 
    ID_Field AS ID1, 
    (Select Count(x) 
    From Table2 
    Where ID_Field = ID1) As mycount 
From Table1 

ID1이 없다는 오류가 반환됩니다. 나는 (동일 함) 컬럼의 원래 이름을 사용하는 경우

  1. 는, 결과는 잘못

  2. 나는 우리 별칭이 오류가 그래서

발생

I 쿼리가 잘못되었다고 생각하십시오.

+1

귀하의 질문은 내게 좋아 보입니다. "효과가 없다"는 것은 무엇을 의미합니까? –

+1

문제 설명이 단순히 "작동하지 않습니다"일 때 솔루션을 제공하기가 어렵습니다. 일어날 것으로 예상되는 것과 그 결과가 실제 결과와 어떻게 다른지에 대한 자세한 설명을 제공하려면 질문을 편집하십시오. 좋은 설명이 무엇인지 힌트를 얻으려면 [ask]를 참조하십시오. –

답변

1

글쎄, 당신은 select 절에 정의 된 별칭을 사용할 수 없지만 당신이에 정의 된 별칭을 사용할 수있는 절에서 :

Select 
    ID_Field AS ID1, 
    (Select Count(x) 
    From Table2 
    Where ID_Field = t1.ID_Field) As mycount 
From Table1 t1 

또한 별칭없이 그것을 할 수 있습니다, 하위 쿼리가 다른 테이블이기 때문에 그러나

Select 
    ID_Field AS ID1, 
    (Select Count(x) 
    From Table2 
    Where ID_Field = Table1.ID_Field) As mycount 
From Table1 

, 나는 쿼리가 더 나은 성능을 것 사령관의 대답에 제안 파생 테이블에 조인 왼쪽하여 생각한다.

+0

그건 작동합니다. 고맙습니다. 이제 나는 그것을 본다. 나는 왜 전에 이것을 시도하지 않았는지 궁금해한다.) – Jan

0

이와 비슷한?

Select 
    Table1.ID_Field_Table1, 
    T2.MYCOUNT  
From Table1 
LEFT JOIN (SELECT ID_Field_Table2, COUNT(x) AS MYCOUNT FROM TABLE2 GROUP BY ID_FIELD_TABLE2) T2 ON T2.ID_Field_Table2=Table1.ID_Field_Table1 
0

한번 시도해보십시오.

Select ID_Field_Table1,COUNT_NBR 
cross apply 
(
Select Count(x) as COUNT_NBR 
    From Table2 
    Where ID_Field_Table2 = ID_Field_Table1 
    group by ID_Field_Table1 
) As mycount 
From Table1