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";
}