質問

現在、次の結果を生成する選択クエリがあります。

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を使用している場合は、新しいPIVOT演算子を使用できます。

Simple PIVOT-顧客が個々の製品に対して行う注文の数。

単純なOrderテーブルの構造:

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

例:OrderテーブルでのPIVOT操作:

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を使用していない場合は、「ピボット」を検索できます。データベース用。

ダックワースの答えは良いです。各セルに複数の値を取得できる場合は、表示する内容に応じて、MINではなくAVGまたはSUMを使用できます。

DBMSでサポートされている場合は、クロス集計クエリまたはピボットクエリを調べることもできます。たとえば、MS Accessにはクロス集計クエリがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top