3

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

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
4

3 に答える 3

6
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
于 2008-10-25T11:27:47.297 に答える
2

SQL Server 2005 を使用している場合は、新しい PIVOT 演算子を使用できます。

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

于 2008-10-25T14:06:52.513 に答える
1

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

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

于 2008-10-25T12:05:29.840 に答える