Hej, sitter och klurar på hur man bäst skriver en fråga som kollar att ett värde förekommer i samtliga rader där data i en kolumn är större än 1. Hej Hej, tack för ditt tappra försöka att begripa min förklaring. :-) Det känns som att det mest naturliga är att arbeta med mängdoperationer i detta fallet, union:s och intersection:s. Jo det blev tydligare. Hmm, ja det gäller ju att formulera sig tydligt för att få fram rätt resultat. Rörde nog till det lite med raderna där. Mmmm... nu så klarnar bilden. :-) Testa det här: Tackar så väldigt!förekomst i samtliga poster större än 1
select distinct fornamn, efternamn
from (serviceatgard join personal
on serviceatgard.tekniker=personal.anstnr)
where tekniker IN (select tekniker
from serviceatgard
where atgard=2)
and tekniker in
(select tekniker
from serviceatgard
where atgard=3)
and tekniker NOT IN
(select tekniker
from serviceatgard
where atgard=1)
Denna funkar men det känns ju inte särskilt smidigt. Om man t.ex har förekomster där atgard är 4,5,6.. etc så blir ju frågan väldigt lång och måste skrivas om för varje ny förekomst. Hur kan man skriva om den till ett enklare uttryck helt enkelt?Sv: förekomst i samtliga poster större än 1
Med stor risk att jag inte riktigt förstår vad du vill göra/få ut från frågan.
Ett exempel där du får JA om tekniker finns med där data är > 1, annars NEJ.
SELECT DISTINCT
b.fornamn,
b.efternamn,
CASE WHEN a.atgard > 1 THEN 'JA' ELSE 'NEJ' END AS [Tekniker finns med]
FROM serviceatgard a
JOIN personal b ON a.tekniker = b.anstnr
Om du bara vill se dom som är med där data är större än 1.
SELECT DISTINCT
b.fornamn,
b.efternamn
FROM serviceatgard a
JOIN personal b ON a.tekniker = b.anstnr
WHERE a.atgard > 1
/Håkan
Sv:förekomst i samtliga poster större än 1
Det jag vill åt är nog inte riktigt det du ger som svar. Jag vill hämta ut namn på tekniker endast om denne har utfört åtgärd 2 OCH 3 men INTE 1.
Om jag förstår det rätt så tolkas operatorn > i t.ex "WHERE atgard > 1" som 2 OR 3 (givet att det bara finns tre åtgärder)
Jag måste alltså kontrollera att en viss tekniker förekommer i SAMTLIGA rader där åtgärden INTE är = 1.
Jag vet inte om det blev tydligare men jag hoppas det.Sv: förekomst i samtliga poster större än 1
Sv: förekomst i samtliga poster större än 1
Men för att förtydliga ännu mer (för mig iaf):
Du söker efter EN viss tekniker åt gången, eller vill du se ALLA som finns med i samtliga rader?
Om du bara vill se EN, skickar du in ett anställningsnummer eller liknande?
[Övertydliga frågor...]
Om det finns t.ex 5 rader där åtgärden inte är 1, så ska teknikern finnas med i ALLA fem raderna?
Oavstt vad det står på raderna?
Två rader kanske har åtgärd 2, och tre rader åtgärd 3.
/HåkanSv:förekomst i samtliga poster större än 1
Jag söker efter ALLA tekniker som har utfört ALLA åtgärder som INTE är = 1
Om det finns 3 åtgärdskategorier 1,2,3 så vill jag ha fram alla tekniker som har utfört åtgärd 2 OCH 3 men INTE 1.
I ditt exempel med 5 rader så behöver inte teknikern finnas på alla fem raderna men han måste finnas i minst en som har åtgärd = 2 OCH en där åtgärd = 3.Sv: förekomst i samtliga poster större än 1
Ordet SAMTLIGA som du skrev ut, får ju tankarna åt ett håll (ordets makt över tanken).
Återkommer med förslag (efter lunch), om inte någon annan är snabbare, nu när vi vet problematiken.
/HåkanSv: förekomst i samtliga poster större än 1
SELECT DISTINCT
b.fornamn,
b.efternamn
FROM serviceatgard a
JOIN personal b ON a.tekniker = b.anstnr
WHERE a.atgard > 1
GROUP BY b.fornamn, b.efternamn
HAVING COUNT(DISTINCT a.atgard) = (SELECT COUNT(DISTINCT atgard)
FROM serviceatgard WHERE atgard > 1)
/Håkan
Sv:förekomst i samtliga poster större än 1
Det verkar funka finfint! Testade med lite olika data i olika scenarion och frågan verkar ge önskat resultat. Det var det jag ville ha, en mer dynamisk fråga.
Bra jobbat!