我在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和项目类型分组。
答案 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