2015-01-15 4 views
1

다른 값을 가진 그룹 행을 그룹화하고 다른 행을 합산하면서 이름을 바꾸는 방법은 무엇입니까?다른 값을 가진 행을 그룹화하고 이름을 바꿉니다.

| Dept | Value 1 | Value 2 | Value 3 | 

| Car1 | 2  | 4  | 9  | 

| Car2 | 2  | 8  | 9  | 

| Car3 | 1  | 4  | 9  | 

| MC1 | 2  | 4  | 9  | 

| MC2 | 2  | 7  | 9  | 

| MC3 | 2  | 4  | 9  | 

| RV1 | 2  | 4  | 5  | 

| RV2 | 2  | 34  | 9  | 

| RV3 | 3  | 4  | 9  | 

내가 이름을 하나의 행으로, 그룹 car1, car2, car3 원하는 자동차, MC1, MC2, 단일 행 이름 오토바이로 MC3 및 RV1, RV2, RV라는 이름의 단일 행에 RV3. "value1, value2 및 value3"열은 각 그룹에 대해 합산됩니다.

+0

각 열은 다른 테이블에서 나오며 모두 외부 조인입니다. 값은 개수입니다. 지금까지 나는 조인을 추가하려고했다 : "내부 조인 (tbl.vehicles에서 부서 선택 (car1, car2, car3) sometable = sometable에)"내 결과는 car1, car2, car3에 대한 값의 합계를 포함합니다 , Dept 컬럼은 포함되지 않습니다. – WebDev90

+0

그래서 'Car1'과 'Car2'와 같은 실제 값이 있다고 가정하고 어떻게 든 그들을 그룹화해야한다면 마지막 문자를 제거 할 수 있습니다 ('substring'과'char_length' 사용). 또는'replace '함수를 사용하여 숫자 문자를 제거하여 'CAR'등을 되 찾을 수 있습니다. 이러한 접근 방식 중 하나를 시도하고 그것이 얼마나 멀리 떨어져 있는지보십시오. – Andrew

답변

1

MySQL은, regexp_replace() 기능을 가지고, 사용할 수있는 하나의 트릭은 CASE 문에 의해 그룹화 해 표시되지 않습니다 예 :

select 
    (case 
    when dept like 'Car%' then 'Car' 
    when dept in ('MC1', ...) then 'MC' 
    when ... 
    end case) dept, 
    sum(...), 
    sum(...) 
from ... 
group by 
    (case 
    when dept like 'Car%' then 'Car' 
    when dept in ('MC1', ...) then 'MC' 
    when ... 
    end case) 

i를 group by 표준 SQL 구문 달리 MySQL의에서 불필요한 것, 어쨌든 대부분의 다른 DB 시스템에서는 필수적이므로 최종 마이그레이션 용도로 사용하는 것이 좋습니다.

+1

case 문과 관련된 문제는 새로운'dept'가 추가되면 어떻게 될까요? 그런 다음 코드를 수정해야합니다. 그러나 이것을 단순화하기 위해 각 값을 입력하는 대신 'Car %'... '와 같은 dept를 사용할 수 있습니다. – Andrew

+0

감사합니다. 훌륭하게 작동했습니다. (내가 평판 포인트를 얻지 못하면 분명히 투표를 할 수 없습니다.) – WebDev90

+0

@ user3826011, 몇 가지 포인트가 있습니다. 걱정하지 마십시오 upvote에 대해,이 질문에 대한 답변을 경우, 그것을 나타내는 투표 아래의 마크를 확인하십시오. 해피. – paqogomez

관련 문제