我已经使用了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 Key链接的 TransactionType.TransactionTypeID 字段。
以下是我想要实现的目标:
我想要一个返回三列的查询(这将是一个存储过程):
名称 - Transaction.Name列的值。
NumberOfTypeATransactions - 类型' A'的所有交易次数的计数。那个人。
NumberOfNonTypeATransactions - 该人员不属于A类型的所有交易的数量,即所有其他交易类型。
因此,以上述数据为例,结果集为:
| **Name** | **NumberOfTypeATransactions** | **NumberOfNonTypeATransactions** |
| Tom | 2 | 1 |
| Jim | 1 | 0 |
| Mo | 0 | 1 |
| Sarah | 1 | 1 |
我可能还需要根据日期(根据交易表中的交易日期&#39;列)返回结果,但我还没有最终确定此要求。< / p>
如何帮助我实现这一目标将不胜感激。表格布局的道歉有点奇怪 - 还没有找到如何正确格式化它们。
答案 0 :(得分:1)
这只是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;