计算 SQL 中的值有多少行?
Posted
技术标签:
【中文标题】计算 SQL 中的值有多少行?【英文标题】:Count how many rows are for a value in SQL? 【发布时间】:2016-09-22 11:52:03 【问题描述】:我有一张如下所示的表格:
[ContractId] [ContractDate] [SnapshotTimeId] [DaysPastDue] [Exposure]
Int(not unique) Datetime Int(format20160431) Int Int
表格按 ContractId、ContractDate 排序。
现在,我想添加第 6 列,我们称之为 Unique,它的第一个 ContractId 值的值为 1,然后加 1,直到遇到下一个 ContractId。基本上,我想知道每个 ContractId 有多少行,并将这些值递增地放在一列中。
编辑:我希望输出看起来像这样
>DocumentId ContractDate SnapshottimeId DPD Exposure Unique
>1 31-Aug-15 31-Aug-15 0 500 1
>1 31-Aug-15 30-Sep-15 5 450 2
>1 31-Aug-15 31-Oct-15 35 450 3
>1 31-Aug-15 30-Nov-15 7 350 4
>1 31-Aug-15 31-Dec-15 37 350 5
>1 31-Aug-15 31-Jan-16 67 340 6
>2 31-Aug-15 30-Jun-14 3 800 1
>2 31-Aug-15 31-Jul-14 15 760 2
>2 31-Aug-15 31-Aug-14 45 750 3
>2 31-Aug-15 30-Sep-14 75 750 4
>2 31-Aug-15 31-Oct-14 0 630 5
>2 31-Aug-15 30-Nov-14 15 590 6
>2 31-Aug-15 31-Dec-14 45 580 7
【问题讨论】:
您能否展示一些示例输入和预期输出 提供一些示例数据 当您说“添加第 6 列”时,您是指将其物理存储在数据库中,还是在您select
数据时创建该值?
【参考方案1】:
我想你想要row_number()
:
select t.*,
row_number() over (partition by contractid order by contractdate) as seqnum
from t;
这将增加一个值,这就是我认为您所描述的。
如果您只想计算每行中每个合约的行数,请使用:
select t.*,
count(*) over (partition by contractid) as cnt
from t;
如果合同有六行,这将在每行中添加“6”。
【讨论】:
谢谢! row_number 是我要找的!【参考方案2】:第一个 ContractId 值为 1,然后加 1,直到碰到下一个 ContractId
RowNumber 可以解决问题
select *,
Row_number() over (partition by contractid order by contractid) as countt
from
table
【讨论】:
【参考方案3】:如果您想知道表格中的行号,请使用:
Select ContractId,
ContractDate,
SnapshotTimeId,
DaysPastDue,
Exposure,
row = ROW_NUMBER() OVER(ORDER BY [ContractId] asc) AS Row
From YourTable
【讨论】:
以上是关于计算 SQL 中的值有多少行?的主要内容,如果未能解决你的问题,请参考以下文章