sql problem ze sformuowaniem zapytania

0

Witam

mam taki problem otóż mam tabele w której mam kolumne płeć, wartość 1 tej kolumny w rekordzie oznacza kobietę a wartość 2 to faceta. Jak powinno wyglądać zapytanie sql'a aby zwracało mi liczbe kobiet i facetów w jednym rekordzie (baza ms access)??

Dostałem zaćmienia i jakoś sobie nie mogę z tym poradzić.

Dzięki za pomoc

0
SELECT SUM(CASE WHEN plec=1 THEN 1 ELSE 0) kobiety, SUM(CASE WHEN plec=2 THEN 1 ELSE 0) mezczyzni FROM tabela
0

Może prościej będzie tak: (ms access jednak nie znam)

SELECT COUNT(m.id), COUNT(k.id)
FROM Tabela m, Tabela k
WHERE m.plec = 2 AND k.plec = 1
0

tu dostaniesz cross join i oba county będą sobie równe i wyniosą ilość_kobiet * ilość_mężczyzn

0

Racja, trzeba dopisać DISTINCT. Niestety chyba jednak nie ma tego w Access (http://www.w3schools.com/SQL/sql_func_count.asp).

SELECT COUNT(DISTINCT m.id), COUNT(DISTINCT k.id)
FROM Tabela m, Tabela k
WHERE m.plec = 2 AND k.plec = 1
0

Dzięki za odpowiedzi, ale

Misiekd napisał(a)
SELECT SUM(CASE WHEN plec=1 THEN 1 ELSE 0) kobiety, SUM(CASE WHEN plec=2 THEN 1 ELSE 0) mezczyzni FROM tabela

wyrażenie to nie działa pod ms access

i faktycznie nie można użyć COUNT(DISTINCT) w ms access

hmm, czyli problem dalej nie rozwiązany, jakies inne sugestie ??

0
slawtaz napisał(a)

wyrażenie to nie działa pod ms access
gdyż ponieważ???

0

nie znam składni do Access-a ale tutaj znajdziesz dużo przykładów:

http://www.mvps.org/access/queries/index.html

0

ehh i dostałem olśnienia, działa coś takiego:

select sum(switch(plec = 1, 1)) as kobiety, sum(switch(plec = 2, 1)) as mężczyźni from tabela

0
Misiekd napisał(a)
slawtaz napisał(a)

wyrażenie to nie działa pod ms access
gdyż ponieważ???

nie wiem dlaczego, może nie zna case, jak próbuje wykonać to podświetla mi słowo where i pojawia się komunikat "Błąd składniowy brak operatora w wyrażeniu ....."

(pominąłem fakt, że zgubiłeś 'as' przed etykietą kolumny)

0
Misiekd napisał(a)
slawtaz napisał(a)

wyrażenie to nie działa pod ms access
gdyż ponieważ???

nie wiem dlaczego, może nie zna case, jak próbuje wykonać to podświetla mi słowo when i pojawia się komunikat "Błąd składniowy brak operatora w wyrażeniu ....."

(pominąłem fakt, że zgubiłeś 'as' przed etykietą kolumny)

0
slawtaz napisał(a)

(pominąłem fakt, że zgubiłeś 'as' przed etykietą kolumny)
to, że access ma sql'a nie przystającego do standardu to inna bajka (do MS tworów trzeba się po prostu przyzwyczaić), ale że musi mieć AS jeśli chcemy dać alias dla kolumny to już przesada :p

0

może i przesada, ale szanowny ms access 2007 nie przepuszcza bez 'as' :]

0

BTW, ja zawsze oznaczam kobiety jako 0 a mężczyzn jako 1 : ) Jakoś łatwiej mi to zapamiętać/skojarzyć : )

He, a może wtedy by się też dało:

SELECT COUNT(*) - SUM(PLEC) AS KOBIETY, SUM(PLEC) AS FACETY ... : )

b

0

Pewnie by sie i dało, ale musiałem to zrobić dla takich wartości jak podałem :]

1 użytkowników online, w tym zalogowanych: 0, gości: 1