문제

현재 다음 결과를 생성하는 선택 쿼리가 있습니다.

Description   Code    Price
 Product 1     A        5
 Product 1     B        4
 Product 1     C        2

다음 쿼리 사용 :

SELECT DISTINCT np.Description, p.promotionalCode, p.Price
FROM            Price AS p INNER JOIN
                         nProduct AS np ON p.nProduct = np.Id

다음을 생산하고 싶습니다.

Description  A  B  C
 Product 1   5  4  2
도움이 되었습니까?

해결책

SELECT 
    np.Id, 
    np.Description, 
    MIN(Case promotionalCode WHEN 'A' THEN Price ELSE NULL END) AS 'A',
    MIN(Case promotionalCode WHEN 'B' THEN Price ELSE NULL END) AS 'B',
    MIN(Case promotionalCode WHEN 'C' THEN Price ELSE NULL END) AS 'C'
FROM 
    Price AS p 
INNER JOIN nProduct AS np ON p.nProduct = np.Id
GROUP BY 
    np.Id,
    np.Description

간단한 테스트 예는 다음과 같습니다.

DECLARE @temp TABLE (
    id INT,
    description varchar(50),
    promotionalCode char(1),
    Price smallmoney
)

INSERT INTO @temp
select 1, 'Product 1', 'A', 5
    union
SELECT 1, 'Product 1',  'B', 4
    union
SELECT 1, 'Product 1', 'C', 2



SELECT
    id,
    description,
    MIN(Case promotionalCode WHEN 'A' THEN Price ELSE NULL END) AS 'A',
    MIN(Case promotionalCode WHEN 'B' THEN Price ELSE NULL END) AS 'B',
    MIN(Case promotionalCode WHEN 'C' THEN Price ELSE NULL END) AS 'C'
FROM
     @temp
GROUP BY 
    id,
    description

다른 팁

SQL Server 2005를 사용하는 경우 새 피벗 연산자를 사용할 수 있습니다.

간단한 피벗 - 개별 제품에 대한 고객의 주문 수.

간단한 주문 테이블의 구조 :

CREATE TABLE Sales.[Order]
    (Customer varchar(8), Product varchar(5), Quantity int)

테이블에는 다음 값이 포함되어 있습니다.

Customer Product Quantity
    Mike     Bike    3
    Mike     Chain   2
    Mike     Bike    5
    Lisa     Bike    3
    Lisa     Chain   3
    Lisa     Chain   4

예 : 주문 테이블의 피벗 작업 :

SELECT *
    FROM Sales.[Order]
    PIVOT (SUM(Quantity) FOR Product IN ([Bike],[Chain])) AS PVT

이 쿼리에서 예상되는 출력은 다음과 같습니다.

Customer Bike Chain
Lisa        3    7
Mike        8    2

SQL Server를 사용하지 않는 경우 데이터베이스의 "피벗"을 검색 할 수 있습니다.

Duckworth의 대답은 좋습니다. 각 셀에 대해 둘 이상의 값을 얻을 수 있다면보고 싶은 내용에 따라 최소 대신 AVG 또는 SUM을 사용하려고 할 수 있습니다.

DBMS가 지원하는 경우 CrosStab 쿼리 또는 피벗 쿼리를 살펴 보는 것 수도 있습니다. 예를 들어 MS Access에는 Crosstab 쿼리가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top