Arbeta med kolumner i aggregerade frågor (Visual Database Tools)

gäller för:SQL Server

När du skapar aggregerade frågor gör fråge- och vydesignerverktygen (Visual Database Tools) vissa antaganden så att den kan konstruera en giltig fråga. Om du till exempel skapar en aggregeringsfråga och markerar en datakolumn för utdata, gör fråge- och vydesignern automatiskt kolumnen till en del av GROUP BY satsen så att du inte oavsiktligt försöker visa innehållet i en enskild rad i en sammanfattning.

Använd gruppera efter

Fråge- och vydesignern använder följande riktlinjer för att arbeta med kolumner:

  • När du väljer alternativet Gruppera efter eller lägger till en mängdfunktion i en fråga läggs alla kolumner som markerats för utdata eller används för sortering automatiskt till i GROUP BY -satsen. Kolumner läggs inte automatiskt till i GROUP BY -satsen om de redan ingår i en mängdfunktion.

    Om du inte vill att en viss kolumn ska ingå i satsen måste du ändra den GROUP BY manuellt genom att välja ett annat alternativ i kolumnen Gruppera efter i fönstret Villkor. Men fråge- och vydesignern hindrar dig inte från att välja ett alternativ som kan resultera i en fråga som inte körs.

  • Om du manuellt lägger till en frågeutdatakolumn i en aggregeringsfunktion i antingen villkors- eller SQL-fönstret, tar fråge- och vydesignern inte automatiskt bort andra utdatakolumner från frågan. Därför måste du ta bort de återstående kolumnerna från frågeutdata eller göra dem till en del av GROUP BY satsen eller en mängdfunktion.

När du anger ett sökvillkor i kolumnen Filter i fönstret Villkor följer fråge- och vydesignern följande regler:

  • Om kolumnen Gruppera efter i rutnätet inte visas (eftersom du ännu inte har angett en aggregeringsfråga) placeras sökvillkoret WHERE i -satsen.

  • Om du redan är i en aggregeringsfråga och har valt alternativet Var i kolumnen Gruppera efter placeras sökvillkoret WHERE i -satsen.

  • Om kolumnen Gruppera efter innehåller något annat värde än Where placeras sökvillkoret HAVING i -satsen.

Använda satserna HAVING och WHERE

Följande principer beskriver hur du kan referera till kolumner i en aggregeringsfråga i sökvillkor. I allmänhet kan du använda en kolumn i ett sökvillkor för att filtrera de rader som ska sammanfattas (en WHERE sats) eller för att avgöra vilka grupperade resultat som visas i de slutliga utdata (en HAVING sats).

  • Enskilda datakolumner kan visas i WHERE satsen eller HAVING beroende på hur de används någon annanstans i frågan.

  • WHERE -satser används för att välja en delmängd rader för sammanfattning och gruppering och tillämpas därför innan någon gruppering görs. Därför kan du använda en datakolumn i en WHERE -sats även om den GROUP BY inte är en del av satsen eller finns i en mängdfunktion. Till exempel väljer följande uttalande alla titlar som kostar mer än $10,00 och beräknar medelpriset.

    SELECT AVG(price)
    FROM titles
    WHERE price > 10;
    
  • Om du skapar ett sökvillkor som omfattar en kolumn som också används i en GROUP BY sats eller aggregeringsfunktion kan sökvillkoret visas som antingen en WHERE sats eller en HAVING sats – du kan bestämma vilket när du skapar villkoret. Följande instruktion skapar till exempel ett genomsnittligt pris för titlarna för varje utgivare och visar sedan medelvärdet för de utgivare där det genomsnittliga priset är större än 10,00 USD:

    SELECT pub_id,
           AVG(price)
    FROM titles
    GROUP BY pub_id
    HAVING (AVG(price) > 10);
    
  • Om du använder en aggregeringsfunktion i ett sökvillkor innehåller villkoret en sammanfattning och måste därför ingå i HAVING -satsen.