2011-01-14 98 views
1

我写的代码只告诉我有多少同学有相同的年龄。我希望自己的名字太...SQL - 如何显示同龄的学生?

SELECT YEAR(CURRENT DATE-DATEOFBIRTH) AS AGE, COUNT(*) AS HOWMANY 
FROM STUDENTS 
GROUP BY YEAR(CURRENT DATE-DATEOFBIRTH); 

这将返回是这样的:

AGE  HOWMANY 
---  ------- 
21  3 
30  5 

谢谢。

TABLE STUDENTS COLUMNS: 
StudentID (primary key), Name(varchar), Firstname(varchar), Dateofbirth(varchar) 

我想也许使用上面某处的代码添加函数CONCAT将会把stundents的名字在同一行中

+0

你可以给我们你的表结构吗? – 2011-01-14 04:15:42

+0

发布您的表架构并再试一次 – 2011-01-14 04:18:38

+0

您知道这些名称不是唯一的,因此无法在一个单独的列中显示吗? – VoodooChild 2011-01-14 04:19:28

回答

1

现有的SQL看起来有错误,但你可以使用GROUP_CONCAT

添加GROUP_CONTACT(colname)作为另一列获取,然后通过,在你的应用程序拆分

1

由此产生的数据集没有表面上基于日出现有用Ë问题,除非你正在寻找学生的列表,他们的年龄,以及有多少其他学生都是一样的年龄:

SELECT NAME, AGE, HOWMANY 
FROM STUDENTS AS S, 
(SELECT YEAR(CURRENT DATE-DATEOFBIRTH) AS AGE, 
     COUNT(*) AS HOWMANY 
    FROM STUDENTS 
    GROUP BY YEAR(CURRENT DATE-DATEOFBIRTH) 
) AS A 
WHERE YEAR(CURRENT DATE-S.DATEOFBIRTH) = A.AGE 

基本上执行与您所计算的年龄数自连接。

0

怎样......

SELECT name FROM students WHERE age = ENTER_AGE_HERE; 

您的姓名和学生的数量可以找到你从查询得到的条目数被发现。

例如,在PHP中,您可以找到数组的长度。

当然,您必须将我的示例中的名称更改为数据库中使用的名称。

0
CREATE TABLE #Student 
(
id int identity(1,1), 
age int, 
name varchar(255) 
) 


INSERT INTO #Student S 
VALUES(21,'bob'), 
(21,'tom'), 
(21,'dick'), 
(21,'william'), 
(35,'mark'), 
(35,'anthony') 

SELECT age,COUNT(*),STUFF(
(
    SELECT ',' + name 
    FROM #Student SS 
    WHERE SS.age = S.age 
    FOR XML PATH('') 
), 1, 1, '') 
FROM #Student s 
GROUP BY age