Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:Warehouse a Microsoft Fabric
A ANY_VALUE függvény bármilyen (NULL ha lehetséges) értéket ad vissza egy sorcsoportból. Összesítő függvényként és ablakfüggvényként (analitikus) is használható:
- Összesítési használat: Tetszőleges értéket ad vissza a teljes csoportból.
- Ablakhasználat: Egy megadott ablakkereten keresztül működik, és tetszőleges értéket ad vissza a teljes ablakból.
Transact-SQL szintaxis konvenciók
Szemantika
Aggregációs függvény szintaxisa:
ANY_VALUE ( [ ALL | DISTINCT ] expression )
Elemzési függvény szintaxisa:
ANY_VALUE ( [ ALL | DISTINCT ] expression) OVER ( [ <partition_by_clause> ] [ <order_by_clause> ] )
Arguments
ALL
Az összesítő függvény alkalmazása az összes értékre. Az ALL az alapértelmezett, csak értelmes beállítás, és csak ISO-kompatibilitás esetén érhető el.
KÜLÖNBÖZŐ
DISTINCT nem értelmezhető, ANY_VALUEés csak ISO-kompatibilitás esetén érhető el.
kifejezés
A visszaadandó érték. Az értékek bármelyike visszaadható eredményként, de ha lehetséges, kihagyja az NULL értékeket.
OVER záradék
A partition_by_clause a záradék által FROM létrehozott eredményhalmazt partíciókra osztja, és a függvényt minden partícióra alkalmazza a rendszer.
Ha nem adja meg ezt a záradékot, a függvény a lekérdezés eredményhalmazának összes sorát egyetlen csoportként kezeli.
A order_by_clause határozza meg az adatok sorrendjét a függvény alkalmazása előtt. Ha partition_by_clause ad meg, az határozza meg a partícióban lévő adatok sorrendjét. A order_by_clause nincs szükség.
További információ: SELECT – OVER záradék (Transact-SQL).
Visszatérési típusok
A kifejezéssel azonos típusú értéket ad vissza.
Megjegyzések
ANY_VALUE nemdeterminista. További információ: Determinisztikus és nem determinisztikus függvények. Ellentétben FIRST_VALUE vagy LAST_VALUE, ANY_VALUE nem biztosít determinisztikus rendezés. Olyan esetekre tervezték, amikor a pontos érték nem fontos a lekérdezési logika szempontjából.
A függvény lehetőség szerint nem értéket próbál visszaadniNULL, és csak akkor ad vissza NULL értéket, ha az összes érték .NULL
Felhasználási eset
Gyakori használati eset ANY_VALUE , ha kulcsoszlopok szerint csoportosított eredményhalmazba nem kulcsoszlopokat kell belefoglalnia. Ha például sorok szerint csoportosítja a sorokat StoreID, akkor az olyan oszlopok értékeit is visszaadhatja ANY_VALUE , mint például a tároló neve, a cím vagy más leíró attribútumok anélkül, hogy hozzáadja őket a GROUP BY záradékhoz, vagy drágább függvényeket használ, például MAXa , MIN, FIRST_VALUEvagy LAST_VALUE hogy belefoglalja őket a vetítésbe. Ez a megközelítés leegyszerűsíti a lekérdezések tervezését, javítja az olvashatóságot és javítja a teljesítményt, mivel az SQL-lekérdezésnek nem kell szükségtelen csoportosítást végeznie a leíró oszlopokon. Ennek eredményeképpen az összesítés tömör, könnyebben karbantartható és hatékonyabb marad.
Examples
A. Nem NULL értékű értékek lekérése
Ez az egyszerű lekérdezés bemutatja, hogyan ANY_VALUE adhat vissza tetszőleges nem NULL értéket egy értékkészletből:
SELECT ANY_VALUE(v)
FROM (VALUES (NULL), (NULL), (NULL), (NULL), (2), (NULL), (NULL), (7), (NULL), (NULL)) AS t(v);
A függvény figyelmen kívül hagyja NULL az értékeket, és nemdeterminista módon adja vissza az egyik nem értéketNULL (néha 2, néha 7).
B. Projekt leíró oszlopai
Ez a lekérdezés az üzletenkénti összes értékesítést összegzi a következőkkel való csatlakozássalFactSales, csoportosítással DimStoreStoreKeyés a kulcstár részleteinek beolvasásávalANY_VALUE.
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;
A függvény alkalmazásával ANY_VALUE nem csoportosító oszlopokat (például StoreName, , StoreDescription, StoreStatus, StorePhoneStoreFax, ZipCode, AddressLine1és AddressLine2) is felvehet anélkül, hogy felsorolja őket a GROUP BY záradékban.
C. Értékek leválasztása sorokról oszlopokra
A FactSales táblázat sorelemenként egy sort tartalmaz, ahol OrderKey azonosítja a sorrendet. Az egyes rendelések esetében az olyan attribútumok, mint OrderDatea , DeliveryDateCustomerKey, és StoreKey ismétlődnek az azonos OrderKeysorhoz tartozó összes sorban. Ezzel szemben ProductKey sortételenként változik, és minden termékhez LineNumbertartozik egy termék.
Az alábbi lekérdezés a sorokat úgy forgatja FactSales el, hogy mindegyik OrderKey egyetlen sor legyen. Megtartja a megosztott rendelésszintű attribútumokat, és külön oszlopot (ProductKey0, ProductKey1, ...) hoz létre az egyes sorok számához társított termékhez. A ANY_VALUE függvény az egyes csoportok reprezentatív értékének kiválasztására szolgál, míg a feltételes kifejezések minden egyes sorelemhez kinyerik a terméket.
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;
A függvény használatával elkerülheti, ANY_VALUE hogy a záradékban CustomerKeyDeliveryDateStoreKey és a GROUP BY záradékban szerepeljenOrderDate. A ANY_VALUE függvény leegyszerűsíti a lekérdezést, és javíthatja a teljesítményt, mivel a záradékban GROUP BY csak egyetlen oszlop (OrderKey) szerepel.
A ANY_VALUE + CASE WHEN minta kinyeri az egyes sorelemeknek megfelelőt ProductKey , és külön oszlopként adja vissza őket. A gyakorlatban ez a minta a termékkulcsok programozott kimutatását hozza létre (a hagyományos UNPIVOT operátor alternatívája).
D. Véletlenszerű érték két oszloppartíciónként
Üzletenként napi fő teljesítménymutatóval (KPI) készít értékesítési szintű részletes jelentést. A jelentésben ugyanazt SalesOrderNumber a (StoreKey, ) partíciót kell visszaadnia, DateKeyahol nincs üzleti szabály egy adott SalesOrderNumberelem kiválasztásához. Nincs szükség a legkorábbi, legújabb vagy legnagyobb sorrend kiválasztására soronként a jelentésben. A felhasználói felületen például az egyes sorok mellett látható a "referenciarendelés az áruház napjára" felirat, így az elemzők gyorsan átugorhatnak egy megrendelésre a (store, day) párból.
A szándék az, hogy egy konzisztenst SalesOrderNumber ad vissza (áruház, nap).
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;
Ha a ANY_VALUE(fs.SalesOrderNumber) kifejezést oszlophivatkozásra fs.SalesOrderNumber cseréli, a címke sorról sorra változik; elveszíti az "egy konzisztens címke minden (áruház, nap)" viselkedését.