Group By条件求和MSSQL查询

Fre*_*cke 20 sql

我有一个表OrderDetails与以下架构:

----------------------------------------------------------------
|  OrderId  |  CopyCost  |  FullPrice  |  Price  |  PriceType  |
----------------------------------------------------------------
|  16       |  50        |  100        |  50     |  CopyCost   |
----------------------------------------------------------------
|  16       |  50        |  100        |  100    |  FullPrice  |
----------------------------------------------------------------
|  16       |  50        |  100        |  50     |  CopyCost   |
----------------------------------------------------------------
|  16       |  50        |  100        |  50     |  CopyCost   |
----------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我需要一个查询,将上面的表推测为具有以下模式的新表:

----------------------------------------------------------------
|  OrderId  |  ItemCount  |  TotalCopyCost  |  TotalFullPrice  |
----------------------------------------------------------------
|  16       |  4          |  150            |  100             |
----------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

目前我在Order.Id上使用Group By来计算项目数.但我不知道如何有条理地推测CopyCost和FullPrice值.

任何帮助将非常感激.

关心弗雷迪

pet*_*erm 67

尝试

SELECT OrderId, 
       COUNT(*) ItemCount,
       SUM(CASE WHEN PriceType = 'CopyCost' THEN Price ELSE 0 END) TotalCopyCost,
       SUM(CASE WHEN PriceType = 'FullPrice' THEN Price ELSE 0 END) TotalFullPrice
  FROM OrderDetails
 GROUP BY OrderId
Run Code Online (Sandbox Code Playgroud)

SQLFiddle

  • 如果您事先不知道价格类型,有什么办法可以做到这一点吗?例如,如果有问题的表`| 订单编号 | 复制成本 | 全价 | 价格 | PriceType |` 是`order` 表和`order_price_type` 表的连接结果吗?然后,汇总表的列数会根据`order_price_types` 表有多少行而改变? (2认同)

Meh*_*zad 6

试试这个查询

select 
   orderId, 
   count(*) as cnt, 
   sum(if(pricetype='CopyCost', CopyCost, 0)) as totalCopyCost,
   sum(if(pricetype='FullPrice', FullPrice, 0)) as totalFullPrice
from 
   tbl
group by 
   orderId
Run Code Online (Sandbox Code Playgroud)

SQL小提琴

| ORDERID | CNT | TOTALCOPYCOST | TOTALFULLPRICE |
--------------------------------------------------
|      16 |   4 |           150 |            100 |
Run Code Online (Sandbox Code Playgroud)