小编kre*_*ack的帖子

了解CUBE和ROLLUP之间的差异

我的任务要求我找出"每个日期写了多少发票?"

我有点陷入困境,并向我的教授寻求帮助.她通过电子邮件向我发送了一个问题,回答了这个问题,"每种类型和版本的炉子已经建成了多少?对于挑战但没有额外的积分,包括炉灶的总数."

这是她发给我的查询:

SELECT STOVE.Type + STOVE.Version AS 'Type+Version'
, COUNT(*) AS 'The Count'
FROM STOVE
GROUP BY STOVE.Type + STOVE.Version WITH ROLLUP;
Run Code Online (Sandbox Code Playgroud)

所以,我调整了那个查询,直到满足了我的需求.这就是我想出的:

SELECT InvoiceDt
, COUNT(InvoiceNbr) AS 'Number of Invoices' 
FROM INVOICE 
GROUP BY InvoiceDt WITH ROLLUP 
ORDER BY InvoiceDt ASC;
Run Code Online (Sandbox Code Playgroud)

它返回了我想要的以下结果.

无论如何,我决定阅读ROLLUP条款,并从微软的一篇文章开始.它说ROLLUP子句类似于CUBE子句,但是它通过以下方式区别于CUBE子句:

  1. CUBE生成一个结果集,显示所选列中所有值组合的聚合.
  2. ROLLUP生成一个结果集,显示所选列中值的层次结构的聚合.

所以,我决定用CUBE替换我的查询中的ROLLUP,看看会发生什么.他们产生了相同的结果.我猜这就是我感到困惑的地方.

看来,如果你使用的是我在这里的查询类型,那么这两个条款之间没有任何实际的区别.是对的吗?或者,我不明白什么?当我读完微软的文章时,我曾想过,使用CUBE子句我的结果应该是不同的.

sql t-sql sql-server sql-server-2008

64
推荐指数
3
解决办法
9万
查看次数

关于chomp的澄清

我现在正在上课,决定花时间学习Perl.我开头的Perl工作(http://www.perl.org/books/beginning-perl/).我在第三章的结尾完成了练习.

其中一个练习要求我"将您的重要电话号码存储在哈希中.编写一个程序,按人名查找数字."

无论如何,我想出了这个:

#!/usr/bin/perl
use warnings;
use strict;

my %name_number=
(
Me => "XXX XXX XXXX",
Home => "YYY YYY YYYY",
Emergency => "ZZZ ZZZ ZZZZ",
Lookup => "411"
);

print "Enter the name of who you want to call (Me, Home, Emergency, Lookup)", "\n";
my $input = <STDIN>;
print "$input can be reached at $name_number{$input}\n";
Run Code Online (Sandbox Code Playgroud)

它只是不起作用.我一直收到此错误消息:

在串联(.)中使用未初始化的值或在hello.plx第17行第1行使用字符串

我尝试了更多的代码,但每个"解决方案"看起来比之前的"解决方案"更复杂.最后,我决定检查答案.

我的代码和答案之间的唯一区别是chomp ($input);后面的存在<STDIN>;.

现在,作者chomp在之前的例子中使用过,但他并没有真正涵盖chomp正在做的事情.所以,我在www.perlmeme.org上找到了这个答案:

chomp()函数将删除(通常)字符串末尾的任何换行符.我们通常说的原因是它实际上删除了与$/(输入记录分隔符)的当前值匹配的任何字符,并$/默认为换行符.


无论如何,我的问题是: …

perl chomp

7
推荐指数
1
解决办法
901
查看次数

标签 统计

chomp ×1

perl ×1

sql ×1

sql-server ×1

sql-server-2008 ×1

t-sql ×1