2012-01-11 4 views
1

계산 SQL 결과 행에 작용. 둘 이상의 행 인 경우 ", et al"과 같은 것을 추가하십시오. 이 쿼리는 단일 열을 반환하고 독립 실행 형을 실행할 수 있어야하지만 하위 쿼리로도 작업해야합니다.나는이 쿼리를 시작하고

어떻게이 작업을 수행 할 수 있습니까?

편집 : 지금처럼 외부 쿼리에서 TOP 1

+0

모든 행을 쉼표로 구분 된 목록으로 연결하려고합니까? 두 개 이상인 경우 ", et al"을 추가 하시겠습니까? 또는 무엇을? 당신은 그냥 행을 계산할 필요가 있다면'select count (1) as mycount from ... '을 할 수 있습니다 ... – Eric

+0

아니요, 연결하지 않아도됩니다. 방금 첫 번째 행을 반환하려는 쿼리를 조정했지만 참으로 둘 이상의 행이있는 경우 결과에 ", et al"을 추가하려고합니다. – kettch

+0

잡았다, 대답 : – Eric

답변

4

사용 topcount..over 추가 한 후 포장 :

select 
    Plantiffs + case when PlantiffCount > 1 then ', et al' else '' end as Plantiffs 
from 
    (
     SELECT TOP 1 
      Parties.FirstName + ' ' + Parties.MiddleName + ' ' + Parties.LastName as Plantiffs, 
      count(1) over() as PlantiffCount 
     FROM 
      Jackets 
      INNER JOIN JacketPartyLinks ON 
       Jackets.Id = JacketPartyLinks.Jacket_JacketPartyLink 
      INNER JOIN Parties ON 
       Parties.Id = JacketPartyLinks.JacketPartyLink_Party 
     WHERE 
      (Jackets.Id = @JacketID) AND (JacketPartyLinks.Role = 0) 
     order by Parties.LastName asc 
    ) x 

countover() 부분은 모든 행을 계산하도록 지시하고 아니 group by 아무것도. 따라서 해당 쿼리에는 group by 절이 없습니다. 당신은 over을 사용할 수 있습니다. 꽤 모호한 집계 함수입니다.

+0

매우 시원합니다. 완전히 새로운 세상과 모든 것. 감사! – kettch

+0

좋아, 음, 작동하는 것처럼 보였다. 이제 저는 스칼라 변수 @JacketID를 선언해야한다고 말하고 있습니다. 거기에 매개 변수를 가져 오기위한 트릭이 있습니까? 그것은 그것이 깨지도록 만드는 과도한 것 같습니다. – kettch

+0

@kettch - 어떻게 매개 변수를로드하나요? 비슷한 질의가 C#을 사용하고'SqlCommand' 객체에 매개 변수를 추가하면 잘 작동합니다. – Eric

관련 문제