2017-05-27 47 views
1

我已經使用了SQL一段時間,但不會說我處於高級水平。我一直試圖弄清楚自己無濟於事。如何選擇多個計數(*)值然後按特定列分組

我有兩個表 - 交易TRANSACTIONTYPE

| **TransactionID** | **Name** | **TransactionTypeID** | 
| 1 | Tom | 1 | 
| 2 | Jim | 1 | 
| 3 | Mo | 2 | 
| 4 | Tom | 3 | 
| 5 | Sarah | 4 | 
| 6 | Tom | 1 | 
| 7 | Sarah | 1 | 


| **TransactionTypeID** | **TransactionType** | 
| 1 | A | 
| 2 | B | 
| 3 | C | 
| 4 | D | 

的Transaction.TransactionTypeID是Forein關鍵鏈接TransactionType.TransactionTypeID場。

這裏是想什麼我實現:

我想查詢(這將是一個存儲過程),返回三列:

名稱 - 的價值Transaction.Name列。

NumberOfTypeATransactions - 該人的所有類型爲'A'的交易的數量的計數。

NumberOfNonTypeATransactions - 不是該類型的所有事務數(即所有其他事務類型)的計數。

因此,使用上面的數據爲例,結果集將是:

| **Name** | **NumberOfTypeATransactions** | **NumberOfNonTypeATransactions** | 
| Tom | 2 | 1 | 
| Jim | 1 | 0 | 
| Mo | 0 | 1 | 
| Sarah | 1 | 1 | 

我可能還需要根據日期時間(這將基於「交易日返回結果'列在交易表中,但我還沒有最終確定這個要求。

任何幫助我如何能夠實現這一點將不勝感激。表的佈局道歉有點奇怪 - 還沒有解決如何正確格式化它們

回答

1

This只是有條件的聚合與一個join

select t.name, 
     sum(case when tt.TransactionType = 'A' then 1 else 0 end) as num_As, 
     sum(case when tt.TransactionType <> 'A' then 1 else 0 end) as num_notAs 
from transaction t join 
    transactiontype tt 
    on tt.TransactionTypeID = t.TransactionTypeID 
group by t.name; 
+0

這似乎已經訣竅 - 感謝您的幫助! –

相關問題