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

Nat*_*oop 2 sql sql-server

我有一个订单表(简化)

OrderId,
SalesPersonId,
SaleAmount,
CurrencyId,
...
Run Code Online (Sandbox Code Playgroud)

我试图在这张桌子上创建一个报告,我希望有类似的东西:

SalesPersonId   TotalCAD    TotalUSD
1               12,345.00   6,789.00
2               7,890.00    1,234.00
Run Code Online (Sandbox Code Playgroud)

我宁愿不做自我加入(也许我过早地进行优化,但这似乎效率低下)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
Run Code Online (Sandbox Code Playgroud)

但是我想不出另一种方法可以做到这一点,任何想法?

Wel*_*bog 8

使用CASE块:

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
Run Code Online (Sandbox Code Playgroud)