2012-03-04 16 views
0

私はこのクエリのROLLUPとCUBE同じクエリフェッチ異なる結果

http://beyondrelational.com/modules/2/blogs/28/posts/10471/tsql-lab-6-using-with-cube-to-generate-subtotal-and-grand-total-rows.aspx

について学ぶためにこのシリーズを以下の午前:

select 
    case 
     when grouping(CustomerName) = 1 then 'All Customers' 
     else CustomerName 
    end as CustomerName, 
    case 
     when grouping(ItemName) = 1 then 'All Items' 
     else ItemName 
    end as ItemName, 
    sum(quantity*pricepercase) as Amount1 
from orders 
group by CustomerName, ItemName 
with cube 

を、著者は次のようになりました:

CustomerName   ItemName    Amount 
-------------------- -------------------- --------------------- 
Jacob    Item 1    312.50 
Jacob    Item 2    480.00 
Jacob    All Items   792.50 
Mike     Item 1    75.00 
Mike     Item 2    44.00 
Mike     All Items   119.00 
All Customers  All Items   911.50 
All Customers  Item 1    387.50 
All Customers  Item 2    524.00 

キューブによって生成される2つの余分な行は、最後の2行です。

CustomerName   ItemName    Amount 
-------------------- -------------------- --------------------- 
Jacob    Item 1    312.50 
Mike     Item 1    75.00 
All Customers  Item 1    387.50 
Jacob    Item 2    480.00 
Mike     Item 2    44.00 
All Customers  Item 2    524.00 
All Customers  All Items   911.50 
Jacob    All Items   792.50 
Mike     All Items   119.00 

最初の結果セットが適切に表示されます。なぜ私はそれを実行すると違いがありますか?

+0

このクエリを含めるように編集されました。 – Animesh

+2

'WITH CUBE'は使用しないでくださいhttp://msdn.microsoft.com/en-us/library/ms177673.aspx *すべての新しい作業にはISO準拠の構文を使用してください。非ISO準拠の構文は、下位互換性のために提供されています。* –

+0

ああ!それは知って良いです。 'WITH CUBE'の代わりに' CUBE(elem1、elem2) ' – Animesh

答えて

2

ORDER BYを明示的に指定している場合を除き、IIRC SQLはいかなる保証もいたしません。時には異なるSQL Serverのバージョン/パッチレベルは、ORDER BYを除いて異なっています。

あなたが必要な場合は

私は著者がSQL Server 2005または2008または2008 R2などを使用して、その結果を生成したかどうかわからないが、私はhigghlyこれは何を参照してください理由であると思われる...

結果セットの特定の順序は常に明示的な ORDER BY句を使用します。

+0

オクラホマ、それは順序が保証されていない可能性があると思った。しかし、「キューブ」ではなく「ロールアップ」を行うと、著者と同じ結果が得られます。それが何か他のものかどうか疑問に思った時です。あなたが言ったように、作者は別のバージョンのSQL Serverを使用している可能性があります。 – Animesh

+0

異なるバージョンのケースが判明した場合、異なる順序で結果を生成するバージョンの機能がありますか? – Animesh

+0

@KishorNanda任意のDBベンダーは、結果が標準に準拠している限り、任意の方法で内部アルゴリズムを自由に変更することができます。これにより、そのような変更に関連する可能性のある機能を特定するのは難しくなります... – Yahia

関連する問題