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