Sql 如何根据列数据获取记录
我在sql中有一个名为Trans的表,它包含4列Sql 如何根据列数据获取记录,sql,sql-server,Sql,Sql Server,我在sql中有一个名为Trans的表,它包含4列 CustomerID int TransDate datetime TransType char(1) Amount float CustomerID可以包含重复的ID,但记录包含不同的转换日期、转换类型或金额。TransType包含“c”表示贷方,包含“d”表示借方 我想选择CustomerId、year、CreditAmount和DebitAmount,其中CreditAmount是TransType为“c”的金额,De
CustomerID int
TransDate datetime
TransType char(1)
Amount float
CustomerID可以包含重复的ID,但记录包含不同的转换日期、转换类型或金额。TransType包含“c”表示贷方,包含“d”表示借方
我想选择CustomerId、year、CreditAmount和DebitAmount,其中CreditAmount是TransType为“c”的金额,DebitAmount是TransType为“d”的金额。年份从包含日期和时间的TransDate开始计算
我想选择CustomerId、年份、CreditAmount和DebitAmount
CreditAmount是TransType为“c”且DreditAmount为的金额
TransType为“d”时的金额。年份从TransDate开始计算,其中
包含日期和时间
我不确定我是否正确理解您,但您可以检查:
SELECT
CustomerId
,[Year] = YEAR(TransDate)
,[CreditAmount] = Amount
,[DebitAmount] = (SELECT Amount
FROM Trans t1
WHERE t1.CustomerId = t.CustomerId
AND t1.TransDate = t.TransDate
AND t1.TransType = 'd')
FROM Trans t
WHERE t.TransType = 'c';
我假设CustomerId/TranDate/TransType是唯一的。我认为这就是您要寻找的:
select customerid,
datepart(yyyy, transdate) as yr,
sum(case when transtype = 'c' then amount else 0 end) as creditamount,
sum(case when transtype = 'd' then amount else 0 end) as debitamount
from trans
group by customerid,
datepart(yyyy, transdate)
这假设您需要每个客户每年的总信用和总借记。请提供示例数据和预期结果。提供表结构键/索引