SQL Server如何对每个不同的集合应用限制并将值作为一列?

标签 sql sql-server t-sql

我真的不知道如何用一句话解释我的问题,所以基本上我想做的是

假设我们有 table

ID | Type     | Date     | Paid 
 1 | Initiate | 20160101 18:21:50.270 |  0.00  
 1 | Create   | 20160101 18:22:50.270 |  2.00  
 1 | Add      | 20160101 18:23:50.270| 40.00  
 1 | Add      | 20160101 18:24:50.270| 80.00  
 2 | Initiate | 20160101 18:31:50.270|  0.00  
 2 | Create   | 20160101 18:32:50.270|  2.00  
 2 | Add      | 20160101 18:33:50.270| 30.00  
 2 | Add      | 20160103 18:33:50.270| 90.00

我想要一个选择 DISTINCT ID 的查询

1
2

我还想要一个名为 FirstPaid 的列,其中如果当每张卡的“ADD”类型的行首先出现时(如最近的日期),则将使用该付费列的值。例如,在 ID 1 中,第一次出现“添加”类型是在第三行,因此将使用该行上的付费列的值。总而言之,它看起来就像这样。

1 | 40.00 
2 | 30.00 

另外,如果可能的话,我想创建另一个名为 Recharge 的列,下次再次出现“ADD”类型时,将使用该值。如果第二天出现下一个类型添加(如 ID 2),则将使用该充值值。

1 | 40.00 | 80.00 
2 | 30.00 | 90.00 
  • 我非常感谢任何形式的帮助,我已经花了几个小时来处理这个查询。我正在使用 TSQL,非常感谢

最佳答案

另一种选择

Declare @YourTable table (ID int,[Type] varchar(50),Date DateTime,Paid money)
Insert Into @YourTable values
( 1,'Initiate','20160101 18:21:50.270', 0.00),
( 1,'Create'  ,'20160101 18:22:50.270', 2.00),  
( 1,'Add'     ,'20160101 18:23:50.270',40.00),  
( 1,'Add'     ,'20160101 18:24:50.270',80.00),  
( 2,'Initiate','20160101 18:31:50.270', 0.00),  
( 2,'Create'  ,'20160101 18:32:50.270', 2.00),  
( 2,'Add'     ,'20160101 18:33:50.270',30.00),  
( 2,'Add'     ,'20160103 18:33:50.270',90.00)

Select ID
      ,Col1 = sum(case when RowNr=1 then Paid else 0 end)
      ,Col2 = sum(case when RowNr=2 then Paid else 0 end)
From (
        Select *,RowNr = Row_Number() over (Partition By ID Order by Date) 
         From   @YourTable
         Where [Type]='Add'
     ) A
 Group By ID

返回

ID  Col1    Col2
1   40.00   80.00
2   30.00   90.00

关于SQL Server如何对每个不同的集合应用限制并将值作为一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40095782/

相关文章:

SQL XML 选择 where 子句

mysql - MYSQL语言中字段级别的比较

sql - 如何将 cte 值分配给变量

mysql - 使用匹配条件对 SQL 中的行提取进行排序的任何方法

sql - Scope_Identity()、Identity()、@@Identity 和 Ident_Current() 之间有什么区别?

sql-server - 我应该使用 EXISTS 还是 IN

sql - 通过递归计算接力赛时间(在动态 SQL 中)

c# - double 型属性(类)和 double 型字段(SQL 查询)中 float 表示的差异

sql-server - TSQL 返回结果是否比 SQL Server 中的存储过程更快

sql - Foreach 循环文件名