webForumDet fria alternativet

distinct på ett av fälten

Databaser & SQL

9 svar · 237 visningar · startad av JAreMANNEN

Medlem sedan aug. 20002 272 inlägg
Frågan#1

Undrar hur man sääter ihop en SQL-sträng som använder distinct på ETT fält...

typ något sånt här.. ;)

select id, namn, (distinct ingredienser), pris from pizzor

Så att pizzan kan ha likadana namn men INTE likadana ingredienser...
Tycker att det borde gå att få ihop det på nåt sätt!

THX!

Medlem sedan dec. 200012 464 inlägg
#2

Nej det går inte att få ihop, inte hos mig i alla fall.

Vad har du för tabellinnehåll och vad vill du ha för resultat?

Medlem sedan aug. 20002 272 inlägg
#3

tabellstruktur:
id | nr | namn | innehall | pris

Såhär ser det ut just nu...

sql = "SELECT distinct innehall, id FROM restaurangpizzor ORDER BY innehall"
set rsPizza = databas.execute(sql)

if rsPizza.EOF then
  response.Write ("Hittade inget")
else
  do until rsPizza.EOF
		
    sql = " select nr, namn, pris, avhpris from RestaurangPizzor where Id = "& rsPizza("id")
    set rs2 = databas.execute(sql)

    response.write ("namn: "& rs("namn") &"<br>innehåll: "& rsPizza("innehall") &"<br><br>")

    rsPizza.movenext
  loop
end if

Som det är nu så kan jag ju (som jag tänker iaf) _INTE_ sortera efter Namn, eftersom den ligger i Innehåll loopen...

Och då blir det hela lite knasigt, för jag vill ju sortera efter pizzornas namn och inte innehållet

Hoppas du förstår det hela nu.. :)

Medlem sedan maj 20021 466 inlägg
#4

För att sortera ut dubletter i ett fält kan du använda GROUP BY.
T.ex. select id, namn, ingredienser, pris from pizzor group by ingredienser

Medlem sedan aug. 20002 272 inlägg
#5

hrm, får felmess....
fattar ingenting utav det så jag ber om lite hjälp här.. ;)

SELECT id, nr, namn, innehall, pris, avhpris FROM restaurangpizzor group by innehall ORDER BY namn

genererar följande fel:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]Column 'restaurangpizzor.Id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Medlem sedan dec. 200012 464 inlägg
#6

Visa lite datainnehåll och förklara :

Vad är duplikat?

Om det finns duplikat, hur vill du välja bland de andra kolumnerna?

Jag förstår inte vad du vill ha för resultat.

Medlem sedan aug. 20002 272 inlägg
#7

OK, here we go!

datainnehåll i DB:
id | nr | namn | innehall | pris | avhpris
---------------------------------------
1 | 24 | Ciao Ciao | Tomat, ost, skinka, fläskfilé, vitlök, champinjoner | 65 | 62
2 | 12 | Ciao Ciao | Tomat, ost, skinka, fläskfilé, vitlök, champinjoner | 70 | 65
3 | 49 | Ciao Ciao | Tomat, ost, skinka, fläskfilé, vitlök | 60 | 50

Detta är tre poster ur databasen, alla tre har _samma_ namn, två av dom har likadant innehåll i pizzan.

Utav detta vill jag få ut TVÅ poster med namnet "Ciao Ciao".
Eftersom att innehållet på två utav dom tre är samma så ska den "räknas" som en, därav min fråga kring distinct (läs första inlägget). Det är altså innehall som är duplikat...

Räcker detta eller behöver du ha mer information?

Medlem sedan dec. 200012 464 inlägg
#8

Vad är det för skillnad mellan 1 och 2? Det som är oklart är vilken av dessa poster som man skall hämta och du måste definera vilka villkor man skall använda. Det är den information jag är ute efter. T.ex så kan du ta den post där id är lägst

 
select * from restaurangpizzor
where id in (select min(id) from restaurangpizzor
group by namn,innehall)
Medlem sedan aug. 20002 272 inlägg
#9

skillnaden mellan 1 och 2 är dess id-nummer, eftersom dom hör till två olika pizzerior.

jag behöver alla fält i uthämtningen, innehållet i pizzan får _inte_ vara lika... :)

Medlem sedan dec. 200012 464 inlägg
#10

Det går inte ihop. Hur skulle resultatmängden se ut i detta fall? En kolumn i en resultatmängd kan enbart innehålla ett värde.

Är du ute efter att få

1,2 | 24,12 | Ciao Ciao | Tomat, ost, skinka, fläskfilé, vitlök, champinjoner | 65,70 | 62,65
3 | 49 | Ciao Ciao | Tomat, ost, skinka, fläskfilé, vitlök | 60 | 50

?

267 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)