Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
İşlev, ANY_VALUE bir satır grubundan herhangi bir (NULL mümkünse) değer döndürür. Bunu hem toplama işlevi hem de pencere (analiz) işlevi olarak kullanabilirsiniz:
- Toplam kullanım: Grubun tamamından rastgele bir değer döndürür.
- Pencere kullanımı: Tanımlı bir pencere çerçevesi üzerinde çalışır ve pencerenin tamamından rastgele bir değer döndürür.
Transact-SQL söz dizimi kuralları
Sözdizimi
Toplama işlevinin söz dizimi:
ANY_VALUE ( [ ALL | DISTINCT ] expression )
Analiz işlevinin söz dizimi:
ANY_VALUE ( [ ALL | DISTINCT ] expression) OVER ( [ <partition_by_clause> ] [ <order_by_clause> ] )
Argümanlar
HEPSİ
Toplama işlevini tüm değerlere uygular. TÜMÜ varsayılan, yalnızca anlamlı bir seçenektir ve yalnızca ISO uyumluluğu için kullanılabilir.
BELİRGİN
DISTINCT ile ANY_VALUEanlamlı değildir ve yalnızca ISO uyumluluğu için kullanılabilir.
expression
Döndürülecek değer. Sonuç olarak değerlerden herhangi biri döndürülebilir, ancak NULL mümkünse değerler atlanır.
OVER yan tümcesi
partition_by_clause yan tümcesi tarafından FROM üretilen sonuç kümesini bölümlere ayırır ve işlev her bölüme uygulanır.
Bu yan tümceyi belirtmezseniz işlev, sorgu sonuç kümesinin tüm satırlarını tek bir grup olarak ele alır.
order_by_clause, işlev uygulanmadan önce verilerin sırasını belirler. partition_by_clause belirtirseniz, bölümdeki verilerin sırasını belirler. order_by_clause gerekli değildir.
Daha fazla bilgi için bkz. SELECT - OVER yan tümcesi (Transact-SQL).
Dönüş türleri
İfadeyle aynı türde bir değer döndürür.
Açıklamalar
ANY_VALUE belirsiz değildir. Daha fazla bilgi için bkz. Deterministik ve deterministik olmayan fonksiyonlar. veya LAST_VALUEANY_VALUE 'nin aksineFIRST_VALUE, belirleyici sıralama sağlamaz. Tam değerin sorgu mantığı için önemli olmadığı durumlar için tasarlanmıştır.
İşlev mümkün olduğunda değer olmayanNULL bir değer döndürmeye çalışır ve yalnızca tüm değerler NULLise değer döndürürNULL.
Kullanım örneği
için yaygın bir kullanım örneği ANY_VALUE , anahtar sütuna göre gruplandırılmış bir sonuç kümesine anahtar olmayan sütunlar eklemeniz gerektiği durumlardır. Örneğin, satırları ölçütüne StoreIDgöre gruplandırıyorsanız, depo adı, adres veya diğer açıklayıcı öznitelikler gibi sütunları yan tümceye GROUP BY eklemeden veya , MIN, FIRST_VALUEgibi MAXdaha pahalı işlevler kullanmadan veya LAST_VALUE bunları projeksiyona dahil etmeden değerleri döndürmek için kullanabilirsinizANY_VALUE. Bu yaklaşım sorgu tasarımını basitleştirir, okunabilirliği artırır ve SQL sorgusunun açıklayıcı sütunlarda gereksiz gruplandırma gerçekleştirmesi gerekmediğinden performansı artırır. Sonuç olarak, toplama işleminiz kısa, bakımı daha kolay ve daha verimli kalır.
Örnekler
A. NULL olmayan herhangi bir değeri alma
Bu basit sorgu, bir değer kümesinden rastgele null olmayan bir değerin nasıl ANY_VALUE döndürülebileceğini gösterir:
SELECT ANY_VALUE(v)
FROM (VALUES (NULL), (NULL), (NULL), (NULL), (2), (NULL), (NULL), (7), (NULL), (NULL)) AS t(v);
işlevi değerleri yoksayar NULL ve olmayan değerlerden biriniNULL (bazen 2, bazen 7) belirsiz bir şekilde döndürür.
B. Açıklayıcı proje sütunları
Bu sorgu, ile DimStorebirleştirerek, üzerinde StoreKeygruplandırarak FactSales ve kullanarak ANY_VALUEanahtar deposu ayrıntılarını alarak mağaza başına toplam satışları özetler.
USE ContosoDW;
GO
SELECT
fs.StoreKey,
ANY_VALUE(ds.StoreName) AS StoreName,
ANY_VALUE(ds.StoreDescription) AS StoreDescription,
ANY_VALUE(ds.Status) AS StoreStatus,
ANY_VALUE(ds.Phone) AS StorePhone,
ANY_VALUE(ds.Fax) AS StoreFax,
ANY_VALUE(ds.ZipCode) AS ZipCode,
ANY_VALUE(ds.AddressLine1) AS AddressLine1,
ANY_VALUE(ds.AddressLine2) AS AddressLine2,
SUM(fs.UnitPrice * fs.SalesQuantity) AS SalesAmount
FROM dbo.FactSales AS fs
LEFT JOIN dbo.DimStore AS ds
ON ds.StoreKey = fs.StoreKey
GROUP BY
fs.StoreKey;
işlevini uygulayarak, yan tümcesinde ANY_VALUE listelemeden GROUP BY gruplandırılmayan sütunları (, StoreDescriptionStoreName, StoreStatus, StorePhone, StoreFax, , ZipCode, AddressLine1ve AddressLine2gibi) ekleyebilirsiniz.
C. Satırlardan sütunlara değerlerin özetlerini kaldırma
Tabloda FactSales satır öğesi başına bir satır bulunur ve burada OrderKey sipariş tanımlanır. Her sipariş için , DeliveryDate, CustomerKeyve StoreKey gibi OrderDateöznitelikler aynı OrderKeyöğesine ait tüm satırlarda yinelenir. Buna karşılık, ProductKey her LineNumberbir ürünle birlikte satır öğesine göre değişir.
Aşağıdaki sorgu satırları özetler FactSales , böylece her OrderKey biri tek bir satır olur. Paylaşılan sipariş düzeyi özniteliklerini tutar ve her satır numarasıyla ilişkili ürün için ayrı bir sütun (ProductKey0, ProductKey1, ...) oluşturur.
ANY_VALUE İşlev, her gruptan temsili bir değer seçmek için kullanılırken, koşullu ifadeler belirli bir satır öğesi için ürünü ayıklar.
SELECT
OrderKey,
-- Projecting groups that are same within the group.
ANY_VALUE(OrderDate) AS OrderDate,
ANY_VALUE(DeliveryDate) AS DeliveryDate,
ANY_VALUE(CustomerKey) AS CustomerKey,
ANY_VALUE(StoreKey) AS StoreKey,
-- Unpivoted values returned as multiple columns per row
ANY_VALUE(IIF(LineNumber = 0, ProductKey, NULL)) AS ProductKey0,
ANY_VALUE(IIF(LineNumber = 1, ProductKey, NULL)) AS ProductKey1,
ANY_VALUE(IIF(LineNumber = 2, ProductKey, NULL)) AS ProductKey2,
ANY_VALUE(IIF(LineNumber = 3, ProductKey, NULL)) AS ProductKey3,
ANY_VALUE(IIF(LineNumber = 4, ProductKey, NULL)) AS ProductKey4,
ANY_VALUE(IIF(LineNumber = 5, ProductKey, NULL)) AS ProductKey5,
ANY_VALUE(IIF(LineNumber = 6, ProductKey, NULL)) AS ProductKey6
FROM dbo.FactSales
GROUP BY
OrderKey;
işlevini kullanarak ANY_VALUE , , DeliveryDateCustomerKeyve StoreKey yan tümcesine GROUP BY yerleştirmekten OrderDatekaçınabilirsiniz.
ANY_VALUE işlevi sorguyu basitleştirir ve yan tümcesinde yalnızca tek bir sütun (OrderKey) kullanıldığından GROUP BY performansı geliştirebilir.
Desen, ANY_VALUE + CASE WHEN her satır öğesi için uygun ProductKey olanını ayıklar ve bunları ayrı sütunlar olarak döndürür. Pratikte bu desen, ürün anahtarlarının programlı bir özetini (geleneksel UNPIVOT işlecin alternatifi) oluşturur.
D. İki sütun bölümü başına rastgele değer
Mağaza başına günlük anahtar performans göstergesi (KPI) içeren bir satış düzeyi ayrıntı raporu oluşturacaksınız. Raporda, belirli SalesOrderNumberbir öğesini seçmek için iş kuralı bulunmayan bölüm başına (StoreKey, DateKey) aynı SalesOrderNumber değeri döndürmeniz gerekir. Rapordaki satır başına en erken, en son veya en büyük siparişi seçme gereksinimi yoktur. Örneğin, kullanıcı arabirimi her satırın yanında "mağaza günü için bir başvuru sırası" gösterir, böylece analist (mağaza, gün) çiftinden hızla bir siparişe atlayabilir.
Amaç, her gün (mağaza, gün) bir tutarlılık SalesOrderNumber döndürmektir.
USE ContosoDW;
GO
SELECT
fs.DateKey,
fs.StoreKey,
-- Window KPI: total sales per Store-Day (keeps row-level output)
SUM(fs.UnitPrice * fs.SalesQuantity)
OVER (PARTITION BY fs.StoreKey, dd.DateKey) AS DailySales,
-- Partition label with no preferred ordering: any one order from that Store-Day
ANY_VALUE(fs.SalesOrderNumber)
OVER (PARTITION BY fs.StoreKey, dd.DateKey) AS SampleOrderNumber
FROM dbo.FactSales AS fs;
İfadeyi ANY_VALUE(fs.SalesOrderNumber) sütun başvurusuyla fs.SalesOrderNumber değiştirirseniz, etiket satır satır değişir; "her (mağaza, gün)" için tek tutarlı etiket" davranışını kaybedersiniz.