我真的不知道如何用一句话解释我的问题,所以基本上我想做的是
假设我们有 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/