SORU
14 ŞUBAT 2012, Salı


Gerçek hayatta DIŞ / ÇAPRAZ kullanmak için, SQL örnek UYGULA

Bir meslektaşım ile CROSS / OUTER APPLY bakıyordum ve bunları kullanmak için gerçek hayattan örnekler bulmak için mücadele ediyoruz.

Geçirdim epey bir zaman bakıyor When should I use Cross Apply over Inner Join? ve googling ama main () örneği gibi oldukça tuhaf (toggle kullanarak bir tablo belirlemek için kaç satır seçmek için başka bir tablo).

Bu senaryo OUTER APPLY fayda olabilir diye düşündüm:

Rehber Tablo (her kişi için 1 kaydı içerir) İletişim Girdileri Tablosu (n Telefon, Faks, E-posta fro her kişi içerebilir)

Ama alt sorgular ortak tablo ifadeleri, OUTER JOIN RANK() OUTER APPLY kullanarak aynı derecede performans gibi görünüyor. Senaryo şöyle: APPLY için geçerli değildir anlamına geldiğini tahmin ediyorum.

Paylaşmak bazı gerçek hayattan örnekler lütfen ve özelliğini açıklamaya yardımcı!

Teşekkürler

CEVAP
14 ŞUBAT 2012, Salı


Bazı APPLY için kullanır...

1)Top N per group queries (bazı cardinalities için daha verimli olabilir)

SELECT pr.name,
       pa.name
FROM   sys.procedures pr
       OUTER APPLY (SELECT TOP 2 *
                    FROM   sys.parameters pa
                    WHERE  pa.object_id = pr.object_id
                    ORDER  BY pr.name) pa
ORDER  BY pr.name,
          pa.name 

2)Bir Tablo Değerli çağıran dış sorguda her satır için İşlev

SELECT *
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle)

3)Reusing a column alias

SELECT number,
       doubled_number,
       doubled_number_plus_one
FROM master..spt_values
CROSS APPLY (SELECT 2 * CAST(number AS BIGINT)) CA1(doubled_number)  
CROSS APPLY (SELECT doubled_number   1) CA2(doubled_number_plus_one)  

4)Unpivoting more than one group of columns

1NF tablo yapısı ihlal varsayar....

CREATE TABLE T
  (
     Id   INT PRIMARY KEY,

     Foo1 INT, Foo2 INT, Foo3 INT,
     Bar1 INT, Bar2 INT, Bar3 INT
  ); 

Örneğin 2008 VALUES sözdizimi kullanarak.

SELECT Id,
       Foo,
       Bar
FROM   T
       CROSS APPLY (VALUES(Foo1, Bar1),
                          (Foo2, Bar2),
                          (Foo3, Bar3)) V(Foo, Bar); 

2005 UNION ALL yerine kullanılabilir.

SELECT Id,
       Foo,
       Bar
FROM   T
       CROSS APPLY (SELECT Foo1, Bar1 
                    UNION ALL
                    SELECT Foo2, Bar2 
                    UNION ALL
                    SELECT Foo3, Bar3) V(Foo, Bar);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BetterCoder

    BetterCoder

    17 Aralık 2012
  • Dive In

    Dive In

    17 Temmuz 2013
  • LearnCode.academy

    LearnCode.ac

    20 Aralık 2012