perl / sql server查询“重新排序”

问题描述 投票:-2回答:2

很抱歉提出这个问题我确信这已经在其他地方得到了解答,但我甚至不知道哪些关键字或如何正确解释...所以...我有这个连接到SQL Server的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 James Hamilton

273 Brian Welcker

工具设计师

13 Janice Galvin

12 Thierry D'Hers

如在

JOBTITLE

BusinessEntityID FirstName LastName ...

是否有可能只在perl中获得此重新排序?不使用/改变查询?

谢谢你,R。

sql-server perl reorderlist
2个回答
1
投票

由于查询返回按作业标题排序的数据,您所要做的就是跟踪以前的作业标题是什么以及何时与当前标题不同,打印出一个新的作业标题标题,如此代码片段所示。

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

0
投票

我相信有人可以给你一个很酷的嵌套SQL命令来做这件事,但我是一个SQL程序员之前的Perl编程。因此,如果您不必担心SQL性能,您应该在DB中查询所有不同的作业标题(除非您已经知道它们),然后循环标题(foreach my $title (@jobTitles)),打印标题然后全部与该标题匹配的记录(WHERE JobTitle=$title类似的东西)。

© www.soinside.com 2019 - 2024. All rights reserved.