webForumDet fria alternativet

SQL för att visa poster med sammavärde

Databaser & SQL

13 svar · 544 visningar · startad av devotion

Medlem sedan jan. 20013 582 inlägg
Frågan#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

Medlem sedan juni 20006 031 inlägg
#2

select * from tabellen where taskNr = 200

Medlem 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

Medlem sedan juni 200032 967 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 )
Medlem 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

Medlem 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

Medlem 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

?

Medlem sedan jan. 20013 582 inlägg
#8

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

Medlem 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

Medlem 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.

Medlem 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 )
Medlem 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

Medlem sedan dec. 20025 483 inlägg
#13

Nevermind... Jag konstaterar att jag missuppfattat uppgiften.

Medlem 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

262 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)