2012-05-03 3 views
0
MySQL 데이터베이스에서

Please see link to get table in better formatMySQL의 GROUPBY 쿼리

, 나는 두 테이블 '차량'아래에 따라 'VEHICLE_CLASS'이 있습니다

VEHICLE 
------------------------------------------- 
VEHICLE_ID | VEHICLE_CLASS_ID | STATUS 
------------------------------------------- 
vehicle_001 | vehicle_class_001 | 0 
vehicle_002 | vehicle_class_002 | 1 
vehicle_003 | vehicle_class_003 | 2 
vehicle_004 | vehicle_class_001 | 0 
vehicle_005 | vehicle_class_002 | 2 
vehicle_006 | vehicle_class_001 | 0 
vehicle_007 | NULL    | 1 
---------------------------------------------- 


VEHICLE_CLASS 
------------------------------------------ 
VEHICLE_CLASS_ID | VEHICLE_CLASS_NAME 
----------------------------------------- 
vehicle_class_001 | ABC 
vehicle_class_002 | BCD 
vehicle_class_003 | EFG 
vehicle_class_004 | XYZ 
vehicle_class_005 | PQR 
vehicle_class_006 | STU 
--------------------------------------- 
  • 는 =이 시작 세 가지 상태 0, 1 =에 있습니다을 진행, 2 = 내가 아래에 따라 결과 행을 얻기 위해 질의를 필요로

완료 :

----------------------------------------------------------------------- 
VEHICLE_CLASS_NAME | COMPLETED_ VEHICLES | NOT_COMPLETED_ VEHICLES 
--------------------------------------------------------------------------- 
ABC    |      |vehicle_001, vehicle_004, vehicle_006 
BCD    | vehicle_005   |vehicle_002 
EFG    | vehicle_003   | 
  • 상태가 2이면 완료되지 않습니다.

여기에 내가 작성한 쿼리가 있지만 올바른 행을 제공하지 않습니다.

SELECT 
     veh.VEHICLE_CLASS_ID, 
     vehclass.VEHICLE_CLASS_NAME, 
     IF(STATUS=2, GROUP_CONCAT(`VEHICLE_ID`),'') COMPLETED_ VEHICLES, 
     IF(STATUS<2,GROUP_CONCAT(`VEHICLE_ID`),'') NOT_COMPLETED_ VEHICLES 
    FROM 
     VEHICLE veh 
     LEFT JOIN VEHICLE_CLASS vehclass 
      on veh.VEHICLE_CLASS_ID = vehclass.VEHICLE_CLASS_ID 
    GROUP BY 
     veh.VEHICLE_CLASS_ID 
    having 
     veh.VEHICLE_CLASS_ID is not null; 

결과 행을 어떻게 얻을 수 있습니까? 감사합니다.

+0

읽기 포스트 쉽도록 서식을 수정하십시오 11g 릴리스. –

답변

1

MySQL의

SELECT 
    vehclass.VEHICLE_CLASS_NAME, 
    GROUP_CONCAT(CASE veh.STATUS WHEN 2 THEN `VEHICLE_ID` ELSE NULL END) COMPLETED_VEHICLES, 
    GROUP_CONCAT(CASE veh.STATUS WHEN 2 THEN NULL ELSE `VEHICLE_ID` END) NOT_COMPLETED_VEHICLES 
FROM VEHICLE veh 
LEFT JOIN VEHICLE_CLASS vehclass 
    ON veh.VEHICLE_CLASS_ID = vehclass.VEHICLE_CLASS_ID 
GROUP BY veh.VEHICLE_CLASS_ID 
HAVING veh.VEHICLE_CLASS_ID is not null; 

SQLFiddle

MSSQL 2008

SELECT 
    vehclass.VEHICLE_CLASS_NAME, 
    STUFF((SELECT CASE v.STATUS WHEN 2 THEN ',' + v.VEHICLE_ID ELSE '' END 
      FROM Vehicle v 
      WHERE v.VEHICLE_CLASS_ID = veh.VEHICLE_CLASS_ID 
      FOR XML PATH ('')) 
     , 1, 1, '') as COMPLETED_VEHICLES, 
    STUFF((SELECT CASE v.STATUS WHEN 2 THEN '' ELSE ',' + v.VEHICLE_ID END 
      FROM Vehicle v 
      WHERE v.VEHICLE_CLASS_ID = veh.VEHICLE_CLASS_ID 
      FOR XML PATH ('')) 
     , 1, 1, '') as NOT_COMPLETED_VEHICLES 
FROM VEHICLE veh 
LEFT JOIN VEHICLE_CLASS vehclass 
    ON veh.VEHICLE_CLASS_ID = vehclass.VEHICLE_CLASS_ID 
GROUP BY veh.VEHICLE_CLASS_ID, vehclass.VEHICLE_CLASS_NAME 
HAVING veh.VEHICLE_CLASS_ID is not null; 

SQLFiddle

ORACLE

위해 가장 가능성이 당신의 최선의

  • wm_concat - - 문서화, 지원되지 않는, 존재

    1. 사용자 정의 사용자 정의 집계 함수 GROUP_CONCAT 대신에 사용하는 것에 대해 this link를 참조 오라클이를 구현합니다.
    2. listagg - 2
  • +0

    Oracle9i, DB2 및 MSSql에서 변환 할 수 있습니까? 도와주세요. – user1373028

    +0

    @ user1373028 대부분의 쿼리는 상대적으로 표준이며, 어려운 부분은 group_concat을 변환합니다. –

    +0

    @ user1373028 MSSQL 구현, Oracle 구현에 대한 의견을 추가했습니다. 자신 만의 DB2입니다. 죄송합니다. 나는 거기에 경험이 없다. –

    1
    SELECT 
        vechile_class.vechile_class_name, 
        GROUP_CONCAT(v1.vechile_id) AS COMPLETED_VEHICLES, 
        GROUP_CONCAT(v2.vechile_id) AS NOT_COMPLETED_VEHICLES 
    FROM vechile_class 
    LEFT JOIN vechile v1 ON 
        v1.vechile_class_id = vechile_class.vechile_class_id AND v1.status = 2 
    LEFT JOIN vechile v2 ON 
        v2.vechile_class_id = vechile_class.vechile_class_id AND v2.status <> 2 
    GROUP BY vechile.vechile_class_id 
    
    +0

    여기서 상기 포스트에 대한 조회의 MySQL 솔루션이다. vehicle_id END) incomplete FROM vehicle_class vc JOIN 차량 v 켜짐 v.vehicle_class_id = vc.vehicle_class_id GROUP BY vc.vehicle_class_id; Oracle9i, DB2 및 MSSql에서 변환하는 데 도움이 필요합니다. 도와주세요. – user1373028