2014-08-29 3 views
0

MySQL 데이터베이스에 연결하는 VB.NET을 사용하여 ReportViewer를 만듭니다. 데이터는 아래와 같이 나타납니다.MySQL 합계 및 사례 쿼리

IdProduct  Quantity  TotalPrice  OrderDate 
    0001    1    10   29/09/2014 
    0002    2    40   29/09/2014  
    0001    4    40   29/09/2014  
    0001    2    20   29/09/2014  
    0001    2    20   29/09/2014  

위의 기록을 바탕으로, 나는 결과가

0001 0002 
    9  2 
    90  40 

쿼리 합계 사례가 여기에 최대한 활용 무엇입니까 아래처럼 표시 할? 미리 감사드립니다.

+0

'IdProduct'는 2로만 제한됩니까? 내 생각 엔 아니, 결과 세트는 응용 프로그램 레벨 코드 –

답변

0

참고 : 쿼리가 "동적"수를 변경하거나 컬럼의 데이터 타입이 그 SQL 텍스트가 해석되는 시점에 지정해야합니다 반환 것은 불가능합니다. 두 쿼리에 의해 반환 된 데이터 유형이 호환 될 수 있도록해야한다는

SELECT SUM(IF(t.IdProduct='0001',t.Quantity,NULL)) AS `0001` 
    , SUM(IF(t.IdProduct='0002',t.Quantity,NULL)) AS `0002` 
    FROM mytable t 
UNION ALL 
SELECT SUM(IF(t.IdProduct='0001',t.TotalPrice,NULL)) AS `0001` 
    , SUM(IF(t.IdProduct='0002',t.TotalPrice,NULL)) AS `0002` 
    FROM mytable t 

참고 :

쿼리에 지정된 결과 집합을 반환하려면, 당신이 뭔가를 할 수 있습니다. QuantityTotalPrice이 둘 다 정수로 정의 된 경우 문제가되지 않습니다.

또한 "수량"행이 "TotalPrice"행보다 먼저 나타날 것이라는 보장은 없습니다. 우리는 그 행동을 관찰하고 그것이 항상 달라질 것 같지 않습니다. 하지만 보증을 받으려면 ORDER BY 절이 필요합니다. 따라서 각 discriminator 열 (각 쿼리의 SELECT 목록에있는 리터럴)을 포함하면 ORDER BY를 사용할 수있는 무언가를 얻을 수 있습니다.

IdProduct '0003'에 대해이 단일 쿼리를 사용하여 다른 열을 동적으로 만들 수는 없습니다. 각 쿼리의 SELECT 목록에 추가해야합니다.

쿼리를 사용하여 고유 IdProduct 목록을 얻은 다음이를 사용하여 필요한 쿼리를 동적으로 만들 수 있습니다. 말했다 ... 우리가하지 그렇게 싶어 모두와


하지만 ....

표준 패턴은 다른 열로 IdProduct과 함께 QuantityTotalPrice을 두 개의 개별 열로 반환하는 것입니다.

SELECT t.IdProduct 
    , SUM(t.Quantity) AS `Quantity` 
    , SUM(t.TotalPrice) AS `TotalPrice` 
    FROM mytable t 
GROUP BY t.IdProduct 

을 그리고 클라이언트 응용 프로그램은 원하는 표시 표현으로 그 결과 집합의 변환을 할 것입니다 : 예를 들어, 결과는이 문에 의해 반환.

결과를 표시 표현식으로 변환하는 작업을 SQL에 푸시하고 싶지는 않습니다.

+0

오, 하 .. 정말 고마워. 내 문제가 해결되었습니다. – Dya

0
select idproduct, sum(quantity), sum(totalprice) 
from your_table 
group by idproduct 
+0

에서 처리 할 수 ​​있습니다. 결과는 질의 만 표시합니다. IdProduct를 ColumnName으로 설정하려고합니다. – Dya

+0

이것은 표현 문제이므로 논리에서 더 잘 처리해야합니다. –

+0

새로운 질문이있는 경우 [질문하기] (http://stackoverflow.com/questions/ask) 버튼을 클릭하여 질문하십시오. 컨텍스트를 제공하는 데 도움이되는 경우이 질문에 대한 링크를 포함하십시오. – Elwinar