3 Nisan 2017 Pazartesi

Windowed functions can only appear in the SELECT or ORDER BY clauses Hatası


Windowed functions can only appear in the SELECT or ORDER BY clauses hatası alıyorsanız büyük ihtimalle windowed function lardan birini yanlış kullanımı ile karşı karşıyasınız. Windowed Function'lar ANSI standatları tarafından belirlenmiş group by, having, where ifadeleri işlendikten sonra çalıştırılırlar. Bundan dolayı Select ve Order BY ifadeleri içinde kullanılmalıdır. Ama ihtiyaç doğrultusunda Where ifadesi içinde de kullanılması gerekir. Bu durumda benim en çok kullandığım yöntem CTE  ile kullanım şeklidir.  Böylede Windowed Function kısmı sanki bir kolonmuş gibi davranabilir.

Aşağıda AdventureWorks database'inde bulunan Customer tablosunda tekrar eden StoreID'leri tespit edelim. Kullandığımız windowed function'ı where cümlesinde kullandığımız zaman -aşağıdaki gibi-
Windowed functions can only appear in the SELECT or ORDER BY clauses hatası alınacaktır.

select distinct
StoreID,
count(StoreID) over (partition by StoreID) as a
from Sales.Customer
where count(StoreID) over (partition by StoreID)>1 --  Where cümlesinde kullanımına izin verilmez.

Bunun yerine scrpiti CTE içinde kullanarak bu hatayı aşabiliriz. Kullanımı aşağıdaki gibidir.


with c as
(
select distinct
StoreID,
count(StoreID) over (partition by StoreID) as a
from Sales.Customer
)
select * from c
where a >1



0 yorum :

Yorum Gönderme