SQL select和Group by

时间:2012-12-05 04:28:41

标签: sql

我在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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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

如果您有两种以上的类型,这可以很好地扩展。您所要做的就是在选择列表中添加另一条SUM(...)行,而不必更改查询的其余部分。

认为这将表现良好,因为SELECT列表中的计算可以在不产生额外行扫描或查找的情况下完成。这是自连接和次选择的缺点。

答案 3 :(得分:0)

这有用吗?:

SELECT
    OrderID, 
    SUM(ItemPrice*ItemType) Type1,
    SUM(ItemPrice*(1-ItemType)) Type0 
FROM 
    TableName 
GROUP BY OrderID