내가가 subselect를 사용하여 결과 집합에 열을 추가 SQL 쿼리 (MSSQLSERVER)를 보내고 있습니다 :SQL : 선택적 하위 쿼리
SELECT P.name,
(select count(*) from cars C where C.type = 'sports') AS sportscars,
(select count(*) from cars C where C.type = 'family') AS familycars,
(select count(*) from cars C where C.type = 'business') AS businesscars
FROM people P
WHERE P.id = 1;
쿼리 위의 조금의 넌센스 테스트 설정에서이지만, 내가 생각하는 것처럼 충분히 도움이된다. 내가 실제로 작업하고있는 쿼리는 복잡한 문제를 다루는 여러 테이블에 걸쳐 있습니다.
위의 예제에서 "people"테이블의 각 레코드에는 "wantsSportscar", "wantsFamilycar"및 "wantsBusinesscar"라는 세 개의 추가 열도 있습니다. 이제 people 테이블의 각각의 "wants ....."필드가 "true"로 설정된 경우 각 추가 열의 subselect를 수행하기 만하면됩니다. 즉, 특정 개인에 대해 P.wantsSportscar가 true로 설정된 경우에만 첫 번째 subselect를 수행하려고합니다. 두 번째 및 세 번째 subselect는 비슷한 방식으로 작동해야합니다.
그래서이 쿼리는 특정 사람의 이름과 소유하고자하는 자동차 종류에 사용할 수있는 모델 수를 보여줍니다. 최종 결과에는 항상 단일 레코드, 즉 특정 사용자의 레코드 만 포함된다는 점에 유의할 가치가 있습니다.
사람이 특정 유형의 자동차에 관심이 없으면 해당 유형의 열이 최종 결과 집합에 포함되지 않는 것이 중요합니다. 이 확실한 예 :
사람이 스포츠카와 가족차를 원하면 결과에 "이름", "스포츠카"및 "가족"열이 포함됩니다.
사람이 B를 원하는 경우, 결과에는 "name"과 "businesscar"열이 포함됩니다.
IF, CASE 및 EXISTS 문과 함께 다양한 조합을 사용하려고했지만 구문 적으로 올바른 솔루션을 얻을 수 없었습니다. 누구라도 이것이 가능한지 알고 있습니까? 쿼리는 저장 프로 시저에 저장됩니다.
나는 이것이 내 문제를 해결했다고 생각한다. (ChrisCM의 답변에 대한 나의 코멘트를 보라). 이 솔루션을 사용하면 프로그래밍 코드에서 다른 열의 값을 확인하고 적절한 조치를 취할 수 있습니다. 그것은 나를 위해 충분하다. 감사. – Jerry