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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perl / sql server查询“重新排序”相关的知识,希望对你有一定的参考价值。

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

此代码打印: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。

答案

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

my $last_job_title;
foreach my $data (@$all_cust) {
    if($last_job_title ne $data->{JobTitle}) {
        $last_job_title = $data->{JobTitle};
        print $data->{JobTitle},"
";
    }
    print $data->{BusinessEntityID}." ".$data->{FirstName}." ".$data->{LastName}."
";
}
另一答案

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

以上是关于perl / sql server查询“重新排序”的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL查询表重新排序数据

Perl DBI / FreeTDS / SQL-Server:如何插入/更新 BLOB varbinary(max) 数据?

Perl DBI - 加载到 SQL Server

Perl DBI / MS ODBC Driver (LinuxL:RHEL) / SQL-Server:如何插入/更新 BLOB varbinary(max) 数据?

应用限制后,我可以重新排序 SQL 选择吗?

如何打印 Perl 的 DBI 填充占位符后执行的 SQL 查询?