With

Geçici bir sanal tablo oluşturmaya yarar. Oluşturduğunuz tablodaki veriyi, karşılaştırma yapmak için kullanabilirsiniz.

Kullanım şekli:

WITH {geçici tablo isminiz}({geçici tablonuzdaki sütun isimleri})
as ({geçici tablonuza koyacağınız değerler için sorgu})
{SELECT INSERT UPDATE DELETE gibi sorgu}

Aşağıdaki örnekte “temptable” isminde geçici bit tablo oluşturarak buna “AveragePrice” sütununu ekledim, içine de “SalesOrderDetail” tablosundaki “UnitPrice” ‘ın ortalamasını yazdım. Sonrasında normal şekilde sorumu yazdım, “SalesOrderDetail” tablosundan “ProductID” ve “UnitPrice” getir, kullanacağın tablolar (FROM) “SalesOrderDetail” ve “temptable” sonunda da karşılaştırma için kullanacağım WHERE her satır için oluşturduğum sanal tablomdaki değer ile karşılaştırma yap ve bu değerden büyük olanları listele.

WITH temptable(AveragePrice)
as (SELECT AVG(UnitPrice) FROM SalesLT.SalesOrderDetail)
SELECT SalesLT.SalesOrderDetail.ProductID, SalesLT.SalesOrderDetail.UnitPrice FROM SalesLT.SalesOrderDetail, temptable WHERE UnitPrice>AveragePrice
SalesLT.SalesOrderDetail
Sorgu sonucu

Örnek 2: Sanal tablomda iki sütun oluşturursam:

İki sütun oluşturup ilkine “UnitPrice” ortalamasını ikincisine ise “LineTotal” ortalamasını yazdırdım. WHERE kısmında ise gerçek listedeki değerleri sanal tablomdaki değerlerle karşılaştırarak koşulumu sağlayanların “SalesOrderID” verilerini listelemesini istedim.

  WITH tempTable (avgUnitPrice, avgLineTotal)
  as (SELECT AVG(UnitPrice), AVG(LineTotal) FROM SalesLT.SalesOrderDetail)
  SELECT SalesOrderID FROM SalesLT.SalesOrderDetail, tempTable WHERE UnitPrice > avgUnitPrice AND LineTotal > avgLineTotal

Örnek 3: iki farklı sanal tablo oluşturulması:

Birinci sanal tablonun sonuna virgül koyarak birincisini oluşturduğunuz şekilde ikincisini de oluşturabilirsiniz. Son satırdaki sorgunuzda oluşturduğunuz ikinci sanal tabloyu kullanabilmek için FROM kısmına ikinci sanal tablonuzun ismini yazmayı unutmayın.

  WITH tempTableOne (avgUnitPrice)
  as (SELECT AVG(UnitPrice) FROM SalesLT.SalesOrderDetail),
  tempTableTwo (avgLineTotal)
  as (SELECT AVG(LineTotal) FROM SalesLT.SalesOrderDetail)
  SELECT SalesOrderID FROM SalesLT.SalesOrderDetail, tempTableOne, tempTableTwo WHERE UnitPrice > avgUnitPrice AND LineTotal > avgLineTotal

Sorgu sonucu 2. örnekteki ile aynı olacaktır.

Yazı oluşturuldu 40

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Benzer yazılar

Aramak istediğinizi üstte yazmaya başlayın ve aramak için enter tuşuna basın. İptal için ESC tuşuna basın.

Üste dön