2011-08-05 43 views
1

说我对上学这样的学生表:如何在拼接字段上进行分组?

St_ID |St_Name|Class_ID|Year 
------+-------+--------+---- 
02345|John |  345|2011 
07871|Jane |  234|2010 

等。 我希望通过级联Class_ID & Year来运行每个Class上的查询。 即345-2011是一个类

我该如何计数(*),通过查询组中的串联字符串?

+0

我知道数据库没有正常化,但这些人一直在Excel中保存他们的数据很长一段时间,并刚刚开始使用数据库。 –

回答

5

两个选项:

1)由子句

例如级联列添加到该组。

SELECT columna || columnb || columnc 
FROM table 
GROUP BY columna || columnb || columnc 

2)由seperately

例如添加各,除了是该组中的级联柱列。

SELECT columna || columnb || columnc 
FROM table 
GROUP BY columna, columnb, columnc 
2

您不需要连接它们,只需列出GROUP BY语句中的所有三列即可。

如果您确实需要连接,那么只需将连接命令放在GROUP BY中。

+0

我知道你是第一个,但是niktrs的回答更加详细,所以我已经接受了这个回答 –

+0

“如果你必须连接,那么只需将连接命令放在GROUP BY中。” 这就是我正在寻找的:-) –

0
select Class_ID||Year as class_year, count(*) 
from table 
group by 1 

随着group by你可以参考列

肛门rententives会建议你应该指的是表达,是这样的:group by Class_ID||Year,但我认为这是作为数字更加清晰,因为它更容易阅读,尤其是因为如果以后变化表达,你不”不得不记得要更改组中的表达式。

+0

这是在Oracle中工作吗?我问这个,因为这是不被SQL服务器接受的 – niktrs

+1

它不是。你甚至不能按列别名分组。 –

+0

如果处理不当,我更喜欢中断事件,这种类型的查询出现错误的可能性更大,因为它会运行并返回不正确的结果,为什么还要打短切成几个字符? –

相关问题