Avatar billede agony2 Nybegynder
13. maj 2002 - 09:15 Der er 27 kommentarer og
1 løsning

sql problem

Jeg har en tabel i en MS SQL db hvor samme person godt kan forekomme mere end en gang. Hvis jeg så udføre følgende sql:

strSQL = "SELECT * FROM [user_profiles_insuredData] WHERE userProfileID ="& session("userProfileID") &";"

Så får jeg samme person flere gange, men det ønsker jeg ikke. Hvordan gør jeg lige dette.
Avatar billede proaccess Nybegynder
13. maj 2002 - 09:16 #1
SELECT DISTINCT ...
Avatar billede Slettet bruger
13. maj 2002 - 09:17 #2
Led efter DISTINCT i manualen :)

Kender ikke MS SQL, men mon ikke noget i stil med

SELECT DISTINCT(userProfileID),* FROM osv osv

burde virke...Sidder på skolen så kan ikke teste.
Avatar billede proaccess Nybegynder
13. maj 2002 - 09:18 #3
Men du får sikkert stadig FOR mange data ud ved at bruge *

Hvis du kun skal bruge Navnet på personer, så skal du kun vælge disse attributter.

Hvis du skal bruge andet end navn (Fx. seneste dato for køb e.l.), skal du bruge GROUP BY...

SELECT Navn, Last(Købsdato) FROM [user_profiles_insuredData] GROUP BY Navn;
Avatar billede ocp Nybegynder
13. maj 2002 - 09:24 #4
Det korrekte er:

strSQL = "SELECT distinct [distinctfield1],[distinctfield2],...,[distinctfield3] FROM [user_profiles_insuredData] WHERE userProfileID ="& session("userProfileID") &";"
Avatar billede agony2 Nybegynder
13. maj 2002 - 09:31 #5
strSQL = "SELECT DISTINCT id, firstname, lastname FROM [user_profiles_insuredData] WHERE userProfileID ="& session("userProfileID") &";"
Giver ikke det ønskede resultat.
Avatar billede proaccess Nybegynder
13. maj 2002 - 09:32 #6
Nej, ID er jo forskelligt for alle rækker...

strSQL = "SELECT DISTINCT firstname, lastname FROM [user_profiles_insuredData] WHERE userProfileID ="& session("userProfileID") &";"
Avatar billede ocp Nybegynder
13. maj 2002 - 09:32 #7
Nej, fordi du tager ID med. Det "ødelægger" distinct-funktionen i og med det er forskelligt selv om for- og efternavn er det samme.
Avatar billede agony2 Nybegynder
13. maj 2002 - 09:40 #8
oki men ID har jeg godt nok brug for min min kode, så hvordan kommer jeg videre herfra ?
Avatar billede proaccess Nybegynder
13. maj 2002 - 09:41 #9
Så må du vælge eet ID for hvert navn...

for eksempel:
strSQL = "SELECT firstname, lastname, First(ID) AS fID FROM [user_profiles_insuredData] WHERE userProfileID ="& session("userProfileID") &" GROUP BY firstname, lastname;"
Avatar billede ocp Nybegynder
13. maj 2002 - 09:41 #10
Du vil altså vise en enkelt person og flere id'er?
Avatar billede ocp Nybegynder
13. maj 2002 - 09:42 #11
Man kunne passende spørge: "Hvad er det egentlig du ønsker at vise/finde?"
Avatar billede ocp Nybegynder
13. maj 2002 - 09:45 #12
Du kan få det sidste tilføjede ID ved at skrive:

strSQL = "SELECT DISTINCT firstname, lastname FROM [user_profiles_insuredData] WHERE userProfileID ="& session("userProfileID") &" and id = (select max(id) from [user_profiles_insuredData] upi where [user_profiles_insuredData].userprofileid=upi.userprofileid);"
Avatar billede hansk Nybegynder
13. maj 2002 - 09:45 #13
Hvis samme person kan have flere id's har du et problem. Så kan du enten ikke bruge distinct funktionen, eller også må du bestemme hvilken id du vil bruge.
Avatar billede agony2 Nybegynder
13. maj 2002 - 09:54 #14
hansk << det mest smarte var jo klart at dele disse personer ud i deres egen tabel, men nu har jeg ikke retighed til at ændre i databasens design, nok fordi den rummer voldsom megen data.
Jeg bliver nok lige nød til at tænke lidt over hvad jeg så gør.
Avatar billede proaccess Nybegynder
13. maj 2002 - 10:06 #15
Hvad f..... er der galt med præcis mine svar ???

Du har fået svar på, hvordan man fravælger ens poster i en tabel, og det svar har vi alle givet dig...  At du så ikke må pille ved tabelstrukturer (hvilket ikke er et krav ved mine svar) og ikke kan gennemskue hvilke data du skal bruge, er da ikke gyldig grund til at afvise et ellers korrekt svar!
Avatar billede agony2 Nybegynder
13. maj 2002 - 10:11 #16
proaccess MS SQL afviser fist(id) som værende en gyldig kommando
Avatar billede agony2 Nybegynder
13. maj 2002 - 10:14 #17
proaccess << jeg ved da godt hvilken data jeg skal bruge men jeg har også andet at lave end at sidde standby på eksperten. Så slap lige lidt af men jeg prøver folks svar af.
Avatar billede agony2 Nybegynder
13. maj 2002 - 10:14 #18
fist(id) = first (id) bare så du ikke hænger dig i en stavefejl.
Avatar billede proaccess Nybegynder
13. maj 2002 - 10:23 #19
Jeg plejer ikke brokke mig, mener ikke tiden er til det...

men det vigtige i mit svar var nu altså ikke at få korrekt syntax for en first()-kommando, men derimod at man ENTEN kunne bruge DISTINCT eller GROUP BY, alt efter hvad det var man var ude efter...
Avatar billede agony2 Nybegynder
13. maj 2002 - 10:26 #20
proaccess << oki måske jeg var lidt hurtigt til at afvise dit svar (bruger ellers aldrig den kanp), jeg afprøve lidt din syntax igen, dvs når serveres komme tilbage online :|
Avatar billede agony2 Nybegynder
13. maj 2002 - 10:30 #21
proaccess <<
Jeg får denne fejl:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]'First' is not a recognized function name.
Avatar billede proaccess Nybegynder
13. maj 2002 - 10:35 #22
Så kan du eventuelt prøve at bruge Min() eller Max(), det det handler om er at få eet ID ud fra hvert navn, så du kan bruge dette til din videre brug i databasen...
Avatar billede ocp Nybegynder
13. maj 2002 - 10:37 #23
Hvis det endelig skal være noget skal det være f.eks. Min(ID) og ikke FIRST (FIRST findes ikke i T-SQL) ellers skal du benytte din oprindelige SQL og bare sige "select top 1 * from .... ".
Avatar billede agony2 Nybegynder
13. maj 2002 - 10:50 #24
proaccess << min() virker :) så hvis du lige laver et nyt spørgsmål så får du ligt point.
Avatar billede proaccess Nybegynder
13. maj 2002 - 11:10 #25
Behøves ikke  ;0)  Bare del ud mellem de andre brugere...  De brugte jo ikke First(), som udvælgelse...  *LOL*
Avatar billede agony2 Nybegynder
13. maj 2002 - 11:12 #26
men du var da først ude med min() og max(), så kom du bare med et spørgsmål.
Avatar billede proaccess Nybegynder
13. maj 2002 - 11:43 #27
Så lad gå da... ;0)
Avatar billede agony2 Nybegynder
13. maj 2002 - 11:43 #28
takker :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester