perl/sql 服务器查询 "re-ordered"
perl/sql server query "re-ordered"
很抱歉问这个问题,我确信这已经在其他地方得到了回答,但我什至不知道什么关键字或如何正确解释它...
所以...我有这个连接到 sql 服务器的 perl 代码..
my $user = '';
my $pass = '.';
my $connection = "dbi:Sybase:server=;database=Adventure";
my $dbh_SQL = DBI->connect($connection, $user, $pass) or die 'Cannot connect';
my $query_cust_main = "
SELECT BusinessEntityID,
Title,
FirstName,
LastName,
Suffix,
JobTitle
FROM HumanResources.vEmployee
order by JobTitle";
my $query_cust_sth = $dbh_SQL->prepare($query_cust_main);
$query_cust_sth->execute();
my $all_cust = $dbh_SQL->selectall_arrayref($query_cust_main, {Slice => {}});
foreach my $data (@$all_cust){
print $data->{BusinessEntityID}." ".$data->{FirstName}." ".$data->{LastName}." ".$data->{JobTitle}."\n";
}
此代码打印:
12 Thierry D'Hers 工具设计师
13 Janice Galvin 工具设计师
2 Terri Duffy 工程副总裁
25 James Hamilton 生产副总裁
273 Brian Welcker 销售副总裁
现在,我想做的是...以某种方式将结果重新排序为:
生产副总裁
25 詹姆斯·汉密尔顿
273 布赖恩·韦尔克
工具设计器
13 贾尼丝·加尔文
12 蒂埃里·德赫斯
如
职位
BusinessEntityID FirstName LastName ...
是否可以仅在perl 中获得此重新排序?没有 using/altering 查询?
谢谢,
R.
我确定有人可以给你一个很酷的嵌套 SQL 命令来执行此操作,但在成为 SQL 程序员之前我是一名 Perl 编程人员。因此,如果您不必担心 SQL 性能,您应该在数据库中查询所有不同的职位(除非您已经知道),然后循环遍历职位 (foreach my $title (@jobTitles)
) , 打印出标题,然后打印出所有匹配该标题的记录(WHERE JobTitle=$title
之类的)。
由于查询返回的是按职位排序的数据,您所要做的就是跟踪以前的职位是什么,当它与当前职位不同时,打印出新的职位header 就像这个代码片段演示的那样。
my $last_job_title;
foreach my $data (@$all_cust) {
if($last_job_title ne $data->{JobTitle}) {
$last_job_title = $data->{JobTitle};
print $data->{JobTitle},"\n";
}
print $data->{BusinessEntityID}." ".$data->{FirstName}." ".$data->{LastName}."\n";
}
很抱歉问这个问题,我确信这已经在其他地方得到了回答,但我什至不知道什么关键字或如何正确解释它... 所以...我有这个连接到 sql 服务器的 perl 代码..
my $user = '';
my $pass = '.';
my $connection = "dbi:Sybase:server=;database=Adventure";
my $dbh_SQL = DBI->connect($connection, $user, $pass) or die 'Cannot connect';
my $query_cust_main = "
SELECT BusinessEntityID,
Title,
FirstName,
LastName,
Suffix,
JobTitle
FROM HumanResources.vEmployee
order by JobTitle";
my $query_cust_sth = $dbh_SQL->prepare($query_cust_main);
$query_cust_sth->execute();
my $all_cust = $dbh_SQL->selectall_arrayref($query_cust_main, {Slice => {}});
foreach my $data (@$all_cust){
print $data->{BusinessEntityID}." ".$data->{FirstName}." ".$data->{LastName}." ".$data->{JobTitle}."\n";
}
此代码打印: 12 Thierry D'Hers 工具设计师 13 Janice Galvin 工具设计师 2 Terri Duffy 工程副总裁 25 James Hamilton 生产副总裁 273 Brian Welcker 销售副总裁
现在,我想做的是...以某种方式将结果重新排序为:
生产副总裁
25 詹姆斯·汉密尔顿
273 布赖恩·韦尔克
工具设计器
13 贾尼丝·加尔文
12 蒂埃里·德赫斯
如
职位
BusinessEntityID FirstName LastName ...
是否可以仅在perl 中获得此重新排序?没有 using/altering 查询?
谢谢, R.
我确定有人可以给你一个很酷的嵌套 SQL 命令来执行此操作,但在成为 SQL 程序员之前我是一名 Perl 编程人员。因此,如果您不必担心 SQL 性能,您应该在数据库中查询所有不同的职位(除非您已经知道),然后循环遍历职位 (foreach my $title (@jobTitles)
) , 打印出标题,然后打印出所有匹配该标题的记录(WHERE JobTitle=$title
之类的)。
由于查询返回的是按职位排序的数据,您所要做的就是跟踪以前的职位是什么,当它与当前职位不同时,打印出新的职位header 就像这个代码片段演示的那样。
my $last_job_title;
foreach my $data (@$all_cust) {
if($last_job_title ne $data->{JobTitle}) {
$last_job_title = $data->{JobTitle};
print $data->{JobTitle},"\n";
}
print $data->{BusinessEntityID}." ".$data->{FirstName}." ".$data->{LastName}."\n";
}