2012-06-20 2 views
1

나는 다 대 다 관계를 설명하는 연결 테이블이있는 두 개의 테이블을 가지고 있습니다. 보고 용 다중 열로 다 대다 쿼리

TABLE buildings 
    building_id 
    building_name 

TABLE facility_types 
    facility_type_id 
    facility_type 

TABLE buildings_2_facility_types 
    building_id 
    facility_type_id 

는 지금은 열로 시설 유형을 포함하여 보고서 각 건물 당이 필요합니다.

REPORT: 

    NAME  golf pool garage 
Building A  Y  N  Y 
Building B  N  Y  Y 
Building C  N  N  N 

어떻게하면 SQL에서이 작업을 수행 할 수 있습니까?

N.B. 이것은 다른 많은 테이블을 포함하는 훨씬 더 큰 쿼리의 일부가 될 것입니다. 나는 그 모든 부분을 할 수 있지만 행을 열로 변환하면 나를 괴롭 히게됩니다!

답변

1

행을 열로 변환하는 것은 정말 고통스러운 일이며 SQL은 이러한 종류의 조작을 의미하지 않는다는 것을 이해해야합니다.

그것은 값 세트가 이항 될 것을 제공 여전히 가능 작은, 공지 제한된이다. 그렇지 않으면 응용 프로그램 계층에 의존해야합니다.

당신이 3 조건을 이해하는 데 도움이해야하는 방법에 exemple :

SELECT 
    building_id, 
    IF(SUM(facility_type_id = 1) > 0, "Y", "N") as facility_type_1, 
    IF(SUM(facility_type_id = 2) > 0, "Y", "N") as facility_type_2, 
    IF(SUM(facility_type_id = 3) > 0, "Y", "N") as facility_type_3 
FROM buildings_2_facility_types 
GROUP BY building_id; 
: 당신은 그것의 sthg이 방법을 얻을 수 있습니다

building_id facility_type_id 
    1    1 
    1    2 
    2    3 
    3    1 
    3    3 

: 테이블 buildings_2_facility_types 가정

참조? 작은, 알려진 및 제한: 물론/

, 당신은 PROC 재고와 함께 할도 수 있지만 일반적으로 선호하는 방식이 아니다.

+0

이 경우 SUM이란 무엇입니까? –

+0

이것은 가장 좋은 속임수입니다. :) 열의 주어진 값의 발생 횟수를 알려줍니다. 부울 조건과 함께 사용할 수 있습니다. 그것은 성능 친화적 인 많은 사용법을 이해할 수있는 패턴입니다. –