如何将计数列插入sql查询

时间:2015-07-01 19:01:03

标签: sql

我需要从查询中检索的表的第二列具有行数,因此第一行将具有1,第二行将具有2,依此类推。我对sql不是很精通,所以如果这是一个简单的任务,我很抱歉。

我正在做的一个基本例子是:

SELECT [Name], [I_NEED_ROW_COUNT_HERE],[Age],[Gender]
FROM [customer]

行计数必须是第二列,并将作为每行的ID。它必须是第二行,因为它生成的文本文件将被发送到状态,并且它们需要特定的格式。

感谢您的帮助。

2 个答案:

答案 0 :(得分:11)

通过编辑,我发现您需要一行 ID (通常称为row number而不是" count")最好从一个唯一的ID中收集数据库(person_id或其他一些独特字段)。如果不可行,您可以在select语句中使用ROW_NUMBER() OVER (ORDER BY EMPLOYEE_ID DESC) AS ID,为此报告创建一个。

select Name, ROW_NUMBER() OVER (ORDER BY Name DESC) AS ID,
Age, Gender
from customer

此函数在输出中添加一个名为ID的字段(请参阅底部的提示以描述别名)。由于这不在数据库中,因此需要一种方法来确定它的增量方式。在over关键字之后,它按名称按降序排序。

关于计数的信息如下(按行排名是唯一的):

如果每个客户有多个条目,但该用户的所选字段相同,并且您正在计算该用户的记录(在用户的一个结果记录中求和),那么您应该写:

select Name, count(*), Age, Gender
from customer
group by name, age, gender

这将计算(see MSDN)所有用户记录按名称,年龄和性别分组(如果匹配,则为单条记录)。

但是,如果您计算所有记录,以便整个报告在每一行都有总计,那么您需要:

select Name, (select count(*) from customer) as "count", Age, Gender
from customer

提示:如果您正在使用类似SSMS的内容来编写查询,则拖动列会在列周围放置括号。只有在列名中有空格时才需要这样做,但DBA会像瘟疫一样避免这种情况。此外,如果您需要列标题是特定的,您可以像我的第一个示例中一样使用as关键字。

  

W3Schools has a good tutorial on count()

     

COUNT(column_name)函数返回   的值的数量(不计算NULL值)   指定列:

SELECT COUNT(column_name) FROM table_name;
  

COUNT(*)函数返回表中的记录数:

SELECT COUNT(*) FROM table_name;
  

COUNT(DISTINCT column_name)函数返回的数量   指定列的不同值:

SELECT COUNT(DISTINCT column_name) FROM table_name; 
  

COUNT(DISTINCT)适用于ORACLE和Microsoft SQL Server,但是   不使用Microsoft Access。

答案 1 :(得分:1)

在每个人中重复相同的数字很奇怪,但听起来这就是你要求的。并不是说这可能不适合您的SQL风格。 MS Access?

SELECT [Name], (select count(*) from [customer]), [Age], [Gender]
FROM [customer]