webForumDet fria alternativet

Problem med SELECT och IIf

4 svar · 209 visningar · startad av Engine^

Engine^Medlem sedan dec. 20003 887 inlägg
#1

Jag har stött på lite bekymmer med en fråga, eller rättare sagt med att välja rätt tabellkolumn för ett värde. Jag ska försöka beskriva så gott det går...

tblIncomingNote
-dblArtikelID (PK)
-lngOrderID (PK)

tblIncomingOrder
-lngOrderID (PK)
-intKundID

tblArtikelRegister
-dblArtikelID (PK)
-cryInköpsPris

tblPriserBehandling
-dblArtikelID (PK)
-intKundID (PK)
-cryPris

Hade inte den sista tabellen vart med i leken är det här inget problem, men nu är det så att om artikel i tblIncomingNote har ett intKundID = 1 i tblIncomingOrder ska jag välja ut cryPris från tblPriserBehandling annars ska jag välja ut cryInköpsPris från tblArtikelRegister. Jag hoppas att de tänkta relationerna framgår.

Jag har försökt lösa detta med en IIf-sats, typ:

SELECT dblArtikelID, IIf(intKundID = 1 AND dblArtikelID IN tblPriserBehandling, cryPris, cryInköpsPris)...

Men så skriver man ju inte och jag vet inte alls hur jag ska vrida till det här. Jag vet inte ens om det går, men jag har blivit förvånad förut över möjligheterna med SQL.

Känner någon sig manad att ge mig en lösning?

LarsGMedlem sedan dec. 200012 464 inlägg
#2
SELECT n.dblArtikelID, IIf(o.intKundID = 1, 
p.cryPris, cryInköpsPris)
from ((tblIncomingNote n inner join tblIncomingOrder o
on ( n.lngOrderId = o.lngOrderId))
inner join tblArtikelRegister a on
(a.dblArtikelID = n.dblArtikelId))
left outer join tblPriserBehandling  p on 
(a.dblArtikelID = n.dblArtikelID
 and o.intKundID = p.intKundID)
Engine^Medlem sedan dec. 20003 887 inlägg
#3

Så enkelt ;)

Tackar LarsG!

Engine^Medlem sedan dec. 20003 887 inlägg
#4

Jag har stött på ett litet problem. Men, till att börja med så har jag måsta ändra på frågan, då Access inte verkar klara av två uttryck i ON-villkoret för LEFT JOINen (kopplingsuttrycket stöds ej.). Detta ställer till en hel del bekymmer för mig... dubletter! Går detta att komma runt på något praktiskt vis?

Engine^Medlem sedan dec. 20003 887 inlägg
#5

Så gott som klar med detta lilla bekymmer... ;) Nu ser frågan ut så här

SELECT tIN.dblArtikelID, strKundArtikelID, strNamn, intLevAntal & ' / ' & intAntal,
  IIf(tPB.dblArtikelID = tAR.intArtikelID AND tPB.intKundID = tIO.intKundID, tPB.cryPris, cryInköpsPris) AS cryPris, tIN.intLevStatus
FROM ((tblIncomingNote tIN
LEFT JOIN tblPriserBehandling tPB
  ON tPB.dblArtikelID = tIN.dblArtikelID)
INNER JOIN tblArtikelRegister tAR
  ON tIN.dblArtikelID = tAR.intArtikelID)
INNER JOIN tblIncomingOrder tIO
  ON tIO.lngOrderID = tIN.lngOrderID
WHERE tIN.lngOrderID = 438

Problemet som uppstår nu är att eftersom vissa artiklar har ett pris för behandling och ett för försäljning, så returnerar frågan två poster för dessa. Nu tänkte jag komma runt det här med att köra TOP 1 och ORDER BY 5. Det ger mig rätt värde, men det känns inte säkert att köra på det sättet... går det att "joina bort" ;) den post med det riktiga priset ifall ett behandlingspris ska hämtas?

red.
jag har kommit fram till att TOP 1 var en väldigt dum lösning... det hade förvisso fungerat kalas om varje order endast innehöll en artikel, men så är ju inte fallet.

Jag behöver hjälp... frågan gör ju precis som jag vill, men hur ska jag få den att inte returnera båda priserna?

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