webForumDet fria alternativet

SQL för att visa poster med sammavärde

13 svar · 544 visningar · startad av devotion

devotionMedlem sedan jan. 20013 582 inlägg
#1

Hej!

Hur gör jag för att visa alla poster där det finns andra som har samma taskNr :OO ?

Dvs om posten 1 har taskNr 100 ska den inte visas

Om däremot posterna 2, 3 och 4 har taskNr 200 ska de listas:

Id          task             taskNr
-----------------------------
2           Installation    200
3           Installation    200
4           Installation    200
-----------------------------

Anväder SQLExpress

Mvh
Henrik

PeddaMedlem sedan juni 20006 032 inlägg
#2

select * from tabellen where taskNr = 200

devotionMedlem sedan jan. 20013 582 inlägg
#3

Pedda skrev:

select * from tabellen where taskNr = 200

:D
Jag kanske uttryckte mig otydligt... Den hade jag klarat själv ;)

Jag vill även visa:

Id          task             taskNr
-----------------------------
2           Installation    200
3           Installation    200
4           Installation    200
5           Koppling        300
6           Koppling        300
7           Renovering    400
8           Renovering    400
-----------------------------

Dvs jag vill visa de poster där det finns andra poster som har samma tasknr (flera poster med samma taskNr) Men inte de poster där det bara finns en post med samma taskNr...

Mvh
Henrik

@ndersMedlem sedan juni 200032 969 inlägg
#4

Om jag förstår rätt:

SELECT * FROM tbl WHERE tasknr IN 
     ( SELECT tasknr FROM tbl
       GROUP BY tasknr
       HAVING COUNT(*) > 1 )
devotionMedlem sedan jan. 20013 582 inlägg
#5

@nders skrev:

Om jag förstår rätt:

SELECT * FROM tbl WHERE tasknr IN 
     ( SELECT tasknr FROM tbl
       GROUP BY tasknr
       HAVING COUNT(*) > 1 )

Klart du förstår rätt..... :)

Mvh
Henrik

devotionMedlem sedan jan. 20013 582 inlägg
#6

Hej! :)

Kan man utveckla den frågan lite...

Grunden som innnan, men:

jag vill visa de poster där det finns andra poster som har samma tasknr (flera poster med samma taskNr) Men inte de poster där det bara finns en post med samma taskNr. och inte de poster där inte status = 4

Dvs om jag får träff med ovanstående fråga vill jag inte visa de poster med samma taskNr som har olika status.

Blev det krångligt?

Mvh
Henrik

Peter SMedlem sedan dec. 20025 483 inlägg
#7
SELECT * FROM tbl t WHERE tasknr IN 
     ( SELECT tasknr FROM tbl
       GROUP BY tasknr
       HAVING COUNT(*) > 1 )
 AND
     ( select count(distinct status)
       from tbl
       where taskNr = t.taskNr ) = 1

?

devotionMedlem sedan jan. 20013 582 inlägg
#8

Hmm... Jag vet att det är svårt att förklara...

devotionMedlem sedan jan. 20013 582 inlägg
#9

Jag ska försöka göra en grafisk beskrivning!

Id          task             taskNr      Status
---------------------------------------
2           Installation    200          4
3           Installation    200          4
4           Installation    200          4
5           Koppling        300          3
6           Koppling        300          4
7           Renovering    400          3
8           Renovering    400          3
9           Nybyggnad    500          4
10          Nybyggnad     500         4
-----------------------------

I ovanstående tabell skall följande poster visas:

2           Installation    200          4
3           Installation    200          4
4           Installation    200          4
9           Nybyggnad    500          4
10          Nybyggnad     500         4

Därför de är dubletter (samma taskNr) och de har endast statusen 4 (dvs det finns inga andra poster med samma taskNr som har någon annan status än 4)

Mvh
Henrik

emissionMedlem sedan dec. 19996 721 inlägg
#10

Lite snurrigt, men är det inte så enkelt som

SELECT * FROM tbl WHERE tasknr IN 
     ( SELECT tasknr FROM tbl 
       GROUP BY tasknr
       HAVING COUNT(*) > 1 )
AND tasknr NOT IN 
     ( SELECT tasknr FROM tbl 
       WHERE status<>4)

Det finns ett antal syntaktiska varianter på denna SQL-sats, men principen kanske blir tydligast så här.

Peter SMedlem sedan dec. 20025 483 inlägg
#11

Enklast är väl att lägga till ett villkor i originalkoden

SELECT * FROM tbl WHERE tasknr IN 
     ( SELECT tasknr FROM tbl
       where status = 4
       GROUP BY tasknr
       HAVING COUNT(*) > 1 )
devotionMedlem sedan jan. 20013 582 inlägg
#12

Peter S skrev:

Enklast är väl att lägga till ett villkor i originalkoden

SELECT * FROM tbl WHERE tasknr IN 
     ( SELECT tasknr FROM tbl
       where status = 4
       GROUP BY tasknr
       HAVING COUNT(*) > 1 )

:h

Hmmm, det kanske det är! Testade emissions förslag, och det verkar fungera.. Ska testa ditt oxå Peter S! :)

Mvh
Henrik

Peter SMedlem sedan dec. 20025 483 inlägg
#13

Nevermind... Jag konstaterar att jag missuppfattat uppgiften.

devotionMedlem sedan jan. 20013 582 inlägg
#14

Peter S skrev:

Nevermind... Jag konstaterar att jag missuppfattat uppgiften.

Aha! Jag kör på emissions förslag då... :moose

127 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)