2013-06-19 14 views
17

W często wykorzystać w TSQL następujące zapytanie:Jak zaznaczyć wszystkie kolumny i count (*) w tym samym zapytaniu

SELECT COUNT(*), * 
FROM CUSTOMER c 
WHERE c.Name like 'foo%'; 

Kiedy próbuję wykonać to zapytanie w Oracle SQL Developer to nie robi działa i podaje mi błąd:

"Missing expression"

Jaka jest dobra składnia?

Z góry dziękuję.

+0

trzeba będzie używać przez grupę .. lub połączyć wynik dwóch zapytaniami. –

+1

Plz podać schemat swojej tabeli .. –

+0

Nie wierzę, że instrukcja działa w SQL Server –

Odpowiedz

4

Jednym ze sposobów jest zrobienie czegoś takiego jak poniżej. Spowoduje to uzyskanie wyniku count (*) dla każdej linii. Ale uwaga, istnieje kartezjańska gra; jeśli masz wiele wierszy takich jak "foo%", będzie to źle działać.

select a.cntr, c.* 
from CUSTOMER c 
    , (select count(*) cntr 
    from customer b 
    where b.name like 'foo%') a 
where c.name like 'foo%' 
34

Pozwoli to lepiej:

SELECT COUNT(*) OVER(), c.* 
FROM CUSTOMER c 
WHERE c.Name like 'foo%'; 
+7

wyjaśnienie byłoby miło – Blauhirn

+2

@ Blauhim, to funkcja analityczna z pustym klauzulą ​​okna - więc oblicza liczbę wierszy w całym zestawie wyników. Zwykle będzie lepiej, ponieważ powinien odwiedzać tylko jeden blok tabeli, licząc wiersze. –

+0

@Jeffrey To jest miłe, ale dodatkowe kolumny dla każdego tworzonego wiersza powodują więcej narzutów niż liczba wybrana (*), szczególnie jeśli masz agregat dla każdej kolumny. Czy możliwe jest posiadanie tego samego agregatu co pierwszy wiersz i czy nie jest on powtarzany dla każdego wiersza? – user3758745

Powiązane problemy