참고 : 쿼리가 "동적"수를 변경하거나 컬럼의 데이터 타입이 그 가 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
참고 :
쿼리에 지정된 결과 집합을 반환하려면, 당신이 뭔가를 할 수 있습니다.
Quantity
및
TotalPrice
이 둘 다 정수로 정의 된 경우 문제가되지 않습니다.
또한 "수량"행이 "TotalPrice"행보다 먼저 나타날 것이라는 보장은 없습니다. 우리는 그 행동을 관찰하고 그것이 항상 달라질 것 같지 않습니다. 하지만 보증을 받으려면 ORDER BY
절이 필요합니다. 따라서 각 discriminator 열 (각 쿼리의 SELECT 목록에있는 리터럴)을 포함하면 ORDER BY를 사용할 수있는 무언가를 얻을 수 있습니다.
IdProduct '0003'에 대해이 단일 쿼리를 사용하여 다른 열을 동적으로 만들 수는 없습니다. 각 쿼리의 SELECT 목록에 추가해야합니다.
쿼리를 사용하여 고유 IdProduct 목록을 얻은 다음이를 사용하여 필요한 쿼리를 동적으로 만들 수 있습니다. 말했다 ... 우리가하지 그렇게 싶어 모두와
하지만 ....
표준 패턴은 다른 열로 IdProduct
과 함께 Quantity
및 TotalPrice
을 두 개의 개별 열로 반환하는 것입니다.
SELECT t.IdProduct
, SUM(t.Quantity) AS `Quantity`
, SUM(t.TotalPrice) AS `TotalPrice`
FROM mytable t
GROUP BY t.IdProduct
을 그리고 클라이언트 응용 프로그램은 원하는 표시 표현으로 그 결과 집합의 변환을 할 것입니다 : 예를 들어, 결과는이 문에 의해 반환.
결과를 표시 표현식으로 변환하는 작업을 SQL에 푸시하고 싶지는 않습니다.
'IdProduct'는 2로만 제한됩니까? 내 생각 엔 아니, 결과 세트는 응용 프로그램 레벨 코드 –