2014-02-11 53 views
0

这里的小提琴:http://sqlfiddle.com/#!3/5945f/1isnull小组:我会遇到什么问题,有没有更好的选择?

我的值都是0和null,我不希望他们是不同的。我希望他们被视为一样。所以(2,0)和(2,null)应该分组为(2,0)或(2,null),无关紧要。我发现我在小提琴中提供的解决方案正在工作。但是,这样做很好吗?也有没有办法不选择写第二次isnull()?

+0

。 。你的回答很好。我更喜欢使用'coalesce()'(通常),因为它是这个功能的ANSI标准函数。 –

+0

谢谢,我读过这个http://msdn.microsoft.com/en-us/library/ms190349.aspx,似乎isnull是一个更好的选择,因为它只评估一次。 – dhblah

+0

。 。当第一个参数很复杂时(比如子查询)会更好。在其他情况下,性能差异并不重要。人们希望微软能够真正解决这个问题,而不是清楚地记录下来。 –

回答

0

我没有看到你做这件事的方式有问题。

关于第二个问题:某些DBMS(如SQL Anywhere)允许在group by中使用别名,但是某些(如Oracle和SQL Server)则不允许使用别名。如果DBMS允许通过使用组aliasses,你可以写:

select id, isnull(price, 0) as pr 
    from foo 
group by id, pr; 
+0

是的,我认为也许有这样的SQL服务器,但似乎,我必须写第二个isnull。谢谢。 – dhblah

0

您可以在一个子查询的成本摆脱第二ISNULL的。

select id, pr 
from 
    (select id, isnull(price, 0) as pr from foo) t 
group by id, pr;