2012-03-09 3 views
2

일부 보고서 라인 차트 그래프를 만들고 데이터의 각 열 (날짜)에 대해 쿼리에서 하나의 데이터 행을 반환하는 것이 가장 쉽습니다. 선 그래프로 나타납니다. 문제는 하나 이상의 라인이 필요하다는 것입니다. WHERE 위치 = '1'그룹 반환 날짜MySql 동일한 열에 대해 다른 별칭을 줄 바꿈 차트로 그룹화

에 의해

| DATE  | SALES | LOCATION | 
    | 2012-01-07 | 500 | 1  | 
    | 2012-01-07 | 600 | 2  | 
    | 2012-01-14 | 700 | 1  | 
    | 2012-01-14 | 400 | 2  | 
    | 2012-01-21 | 450 | 1  | 
    | 2012-01-21 | 550 | 2  | 

SELECT 날짜, 합계 TABLE FROM SalesTotal1로 (판매) : 여기

내가 데이터의 간단한 예와 함께 무엇을 할 수 : 나는 그냥 내 그래프의 라인하지만 난 정말 아직 날짜별로 그룹화 같은 열에 하나 이상의 별칭에서 원하는이 있으면 괜찮습니다

|  DATE | SalesTotal1 | 
    | 2012-01-07 |  500  | 
    | 2012-01-14 |  700  | 
    | 2012-01-21 |  450  | 

w 그 ould가 다음을 반환합니다.

|  DATE | SalesTotal1 | SalesTotal2 | 
    | 2012-01-07 |  500  |  600  | 
    | 2012-01-14 |  700  |  400  | 
    | 2012-01-21 |  450  |  550  | 

이것이 가능합니까? 하위 쿼리? 나는 많은 것들을 시도했습니다 감사합니다 ~

답변

2

당신이 뭔가를 할 수 있습니다 :

SELECT `date`, 
     SUM(IF(location=1,sales,0)) As SalesTotal1, 
     SUM(IF(location=2,sales,0)) As SalesTotal2 
FROM my_table 
GROUP BY `date` 

당신은 위치가 생각만큼의 열을에 추가해야 할 것입니다, 당신은 많은 지역이있는 경우는 것 성가시다. 아마도 코드면에서 재배치를 고려해 볼 수 있습니다 (많은 지역이 많은 경우).

+0

이 답변은 내 필요에 신속하고 쉬운 해결책이었습니다. –

+0

이것은 IF를 사용하여 내가 필요로하는 것과 가깝게 보인다. UNION을 사용했지만 첫 번째 SELECT의 별칭 아래에 결과 만 그룹화합니다. 나는 다음과 같은 것이 필요하다 : IF (where description like 1.1 %) AS desc1, IF (WHERE description LIKE '1.2 %') AS desc2' 이 가능한가? – TARKUS

0

일반적으로 MYSQL에서 지원하지 않는 PIVOT 테이블 쿼리라고합니다. 그러나 정확한 위치를 알고 있다면 일련의 하위 쿼리를 사용하여 위치를 파악할 수 있습니다. 정확한 위치를 모르는 경우에는 위치를 검색하고 쿼리 문자열을 작성한 다음 실행하는 저장 프로 시저를 작성해야합니다. 다음 두 위치를 수행하는 방법은 다음과 같습니다.

SELECT 
    date, 
    SalesTotal1, 
    SalesTotal2 
FROM (
    SELECT 
     date, 
     sum(sales) as SalesTotal1 
    FROM TABLE 
    WHERE location = '1' 
    group by date 
) S1 
INNER JOIN (
    SELECT 
     date, 
     sum(sales) as SalesTotal2 
    FROM TABLE 
    WHERE location = '2' 
    group by date 
) S2 ON S1.date=S2.date