sql - 根据第二列值对列中的不同行求和

标签 sql sql-server

我有一个订单表(简化)

OrderId,
SalesPersonId,
SaleAmount,
CurrencyId,
...

我正在尝试在此表上创建一个报告,我希望得到类似这样的结果:

SalesPersonId   TotalCAD    TotalUSD
1               12,345.00   6,789.00
2               7,890.00    1,234.00

我不希望进行自连接(也许我过早地进行了优化,但这似乎效率低下)IE:

SELECT SalesPersonId, SUM(OrdersCAD.SaleAmount), SUM(OrderUSD.SaleAmount)
FROM Orders
    LEFT JOIN Orders AS OrdersCAD ON Orders.OrderID AND Orders.CurrencyID = 1
    LEFT JOIN Orders AS OrdersUSD ON Orders.OrderID AND Orders.CurrencyID = 2

但我想不出另一种方法来做到这一点,有什么想法吗?

最佳答案

使用 CASE block :

SELECT
  SalesPersonId,
  SUM(
    CASE CurrencyID
      WHEN 1 THEN SaleAmount
      ELSE 0
    END
  ) AS TotalCAD,
  SUM(
    CASE CurrencyID
      WHEN 2 THEN SaleAmount
      ELSE 0
    END
  ) AS TotalUSD
FROM Orders
GROUP BY SalesPersonId

关于sql - 根据第二列值对列中的不同行求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/812675/

相关文章:

asp.net - 如何将 SQL 连接字符串从服务器更改为 Windows 身份验证

php - 需要由 PHP 逐行处理的 CSV 需要很长时间(或超时)才能进入 SQL 数据库

sql - 如何在 SQL Server 2005 中模拟 BEFORE DELETE 触发器

sql - 根据最大id连接表

MySQL性能: store Boolean values (flags) in one row as an aggregated number or not?

sql - GROUP BY 子句如何管理 NULL 值?

SQL Server 如何将3个查询合并为1个?

SQL 自定义日期时间格式转日期时间

mysql - 如何选择具有最高列值的行并在重复的情况下返回最上面的行?

sql - 如何并行运行 sql server 存储过程?