Sql 如何根据列数据获取记录

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

我在sql中有一个名为Trans的表,它包含4列

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)

这假设您需要每个客户每年的总信用和总借记。

请提供示例数据和预期结果。提供表结构键/索引