我在SQL Server 2008中的以下表R2數據庫:SQL返回多非空值與最高的指數
客戶:
CustID CustName
====== ========
1 A
2 B
3 C
4 D
交易:
TransID CustID InvoiceTotal LoyaltyPointsEarned
======= ====== ============ ===================
1 1 300 25
2 2 NULL 10
3 3 100 10
4 2 200 25
5 1 NULL 100
6 3 120 NULL
交易按時間順序插入(更高的ID =更新的訂單);事務允許InvoiceTotal或LoyaltyPointsEarned爲NULL,但不能同時爲兩者。
我想獲得最新的非空發票總額AND(這是有點棘手)贏得了所有客戶最近的非空的忠誠點,在同一行上爲每個客戶顯示以下信息:
CustID CustName LatestInvoiceTotal LatestLoyaltyPointsEarned
1 A 300 100
2 B 200 25
3 C 120 10
下面的查詢提供了最新的發票總額:
SELECT DISTINCT
CustID, CustName, LatestInvoiceTotal, LatestLoyaltyPointsEarned
FROM
Customers
INNER JOIN
(SELECT
CustID, InvoiceTotal AS LatestInvoiceTotal, TransID
FROM
Transactions
GROUP BY
CustID, InvoiceTotal, TransID) CustomerTransactions ON Customers.CustID = CustomerTransactions.CustID
INNER JOIN
(SELECT
CustID, MAX(TransID) AS MaxTransID
FROM
Transactions
WHERE
InvoiceTotal IS NOT NULL
GROUP BY
CustID) MaxTransactionIDs ON Customers.CustID = MaxTransactionIDs.CustID AND CustomerTransactions.TransID = MaxTransactionIDs.MaxTransID
這怎麼可能擴展到做LoyaltyPointsEarned一樣,沒有結果複製客戶記錄?
此作品一種享受,謝謝。我不得不用desc替換降序(SQL Server 2008 R2)。 – pdm2011
修正:-)。我仍然習慣於SQL Server特性。 –