0

私はこのようなSQLのテーブルを持っています。

OrderID  ItemID  ItemPrice   ItemType
1        A       100         1
1        B       50          1
1        C       10          0
2        A       100         1
2        F       60          0
3        G       10          0

だから私はこのように出て行きたいですか?

OrderID ItemPrice -Type= 1  ItemPrice -Type= 0
1             150                     10
2             10                      60
3             10    

使用するSQLコマンドについて何か考えがありますか?注文IDとアイテムタイプによるグループ化だと思います。

4

4 に答える 4

0

これは機能しましたか?:

SELECT
    OrderID, 
    SUM(ItemPrice*ItemType) Type1,
    SUM(ItemPrice*(1-ItemType)) Type0 
FROM 
    TableName 
GROUP BY OrderID
于 2012-12-05T04:48:27.923 に答える
0

これを試して::

Select 
DISTINCT(orderId),
(Select   SUM(ITEMPRICE) from table where Itemtype=1 group by ORDERID) as ItemType1, 
(Select   SUM(ITEMPRICE) from table where Itemtype=0 group by ORDERID) as ItemType0

from table
于 2012-12-05T04:36:52.757 に答える
0

テストされていませんが、これでうまくいくはずです。

SELECT t1.OrderID, 
ItemPrice-Type1 = SUM(t1.ItemPrice), 
ItemPrice-Type2 = SUM(t2.ItemPrice)
FROM TableName t1
INNER JOIN TableName t2 on t1.OrderID = t2.OrderID and t1.ItemID = t2.ItemID
WHERE t1.ItemType = 1 AND t2.ItemType = 0
GROUP BY t1.OrderID
于 2012-12-05T04:40:08.707 に答える
0

あなたがしているのはピボット変換です。これを行うにはいくつかの方法がありますが、私のお気に入りの方法はSUM内でCASEを使用することです。

SELECT
    OrderId,
    SUM(CASE WHEN ItemType = 0 THEN ItemPrice ELSE 0 END) AS Type0_Price,
    SUM(CASE WHEN ItemType = 1 THEN ItemPrice ELSE 0 END) AS Type1_Price
FROM MyTable
GROUP BY OrderId

これは、3つ以上のタイプがある場合にうまくスケーリングします。SUM(...)クエリの残りの部分を変更せずに、選択リストに別の行を追加するだけです。

SELECTリストの計算は、追加の行スキャンやルックアップを行わずに実行できるため、これはうまく機能すると思います。これは、自己結合とサブ選択の欠点です。

于 2012-12-05T04:40:17.993 に答える