2012-05-04 1 views
0

더 자세한 설명이 포함 된 제목을 만드는 것은 어렵습니다. 나는 지금 그것에 2 시간을 보내고, 단지 누군가 물을 가장하기 위해 상상했다! 분명히그룹화 된 데이터를 MySQL 쿼리의 행이 아닌 열 형식으로 가져 오기

id | name  
    1  | Plymouth 
    2  | Torquay 
        etc 

salesRecords

itemId | saleDate (unix) | qty | saleLocation | 
     123 | UNIXTIMESTAMP  |  1  |   1   | 
     458 | UNIXTIMESTAMP  |  4  |   2   | 
     215 | UNIXTIMESTAMP  |  2  |   2   | 
     541 | UNIXTIMESTAMP  |  1  |   1   | 

제품

itemId | brand |  
     123 | 1  |  etc 

각 테이블 ACTU :

나는이

위치 같은 모양 3 개 테이블을 가지고 동맹국은 그보다 더 많은 데이터를 포함하고 있지만 이것만으로도 충분합니다.

내가 필요한 것은 특정 항목이 판매 된 각 항목 또는 항목 그룹의 수를 알 수있는 결과물입니다.

mnth | yr | location1Sales |  location2Sales 
    10  | 2006 |   14   |   7 
    11  | 2006 |   13   |   12 
    12  | 2006 |   8   |   1  ... etc 

어제 여기에 게시 질문

OUTPUT : 상당히 효율적인 쿼리를 MySQL subquery to get a list of IDs from one table to query a second table

친절하게 대답했고 나에게 준이를 검색하는 I는 다음과 같다 뭔가가 필요 TOTAL의 모든 지역에 판매량이 통합되어 있습니다 (어제의 질문에 게시 된 검색어와 관련된 위치 데이터가 없습니다).

물론 WHERE에 추가 절을 추가하고 단일 위치의 데이터 만 가져올 수는 있지만 모든 테이블을 하나의 테이블에 넣기를 원합니다.

오늘 그룹화/where 절을 추가하여 쿼리에 위치를 추가하려고하지만 위 형식의 테이블을 작성하는 방법에 대해 머리를 터지게합니다.

내가 지금까지 행의 위치 데이터 출력의 취득 등이있어

,하지만 난에 따라 열 형태로 필요 이상의

SELECT DAY(FROM_UNIXTIME(saleDate)) AS 
    DAY , MONTH(FROM_UNIXTIME(saleDate)) AS mnth, 
    YEAR(FROM_UNIXTIME(saleDate)) AS yr, 
    COUNT(s.id) AS invCount, locations.name, 
    s.location, SUM(quantity) AS saleQty 
FROM salesRecords s 
    LEFT JOIN locations ON locations.id = s.location 
    INNER JOIN products ON s.itemNo = products.id 
    WHERE products.brand = '313' <=== X 
AND s.location LIKE '1\_%' <=== XX 
GROUP BY `locations`.`name` , mnth, yr 

X : 브랜드 ID는 브랜드

에 의해 그룹 제품에 필요한 변수

XX :이 데이터의 목적 상 모두 위치 ID로만 필요하지만 걱정하지 않습니다. salesLocation은 "locationId_tilId" 형식으로 판매됩니다. 십자 기호로

나는 이 데이터를 가져 와서 자바 스크립트 배열로 변환하려고 했으므로 차트에 화려한 amChart 플러그인을 사용할 수 있습니다.

+1

것 같습니다. –

+0

그래, 일종의 피벗 작업 일 것 같아. 이것이 MySql에서도 가능한지 전혀 모르겠다. –

+0

미리 결과의 열 번호와 이름을 알고 있다면 그리 나쁘지 않습니다. ....그렇지 않으면 그것은 꽤 추한, 일반적으로 저장 프로 시저를 사용하여 동적 SQL –

답변

0
select 
     year(FROM_UNIXTIME(saleDate)) as yr, 
     month(FROM_UNIXTIME(saleDate)) as mnth, 
     sum(if(saleLocation = 1, qty, 0)) as Location1Sales, 
     sum(if(saleLocation = 2, qty, 0)) as Location1Sales 
    from 
     salesRecords 
    group by 
     year(FROM_UNIXTIME(saleDate)), 
     month(FROM_UNIXTIME(saleDate)) 

당신이 더 많은 매출 위치가있는 경우, 다만 SUM에 추가 (() 경우) 구축 크로스 탭 또는 피벗 작업을 수행하려는처럼 ...

관련 문제