Jag brottas med en SQLfråga.
Jag har en tabell med en prislista OPRICL.
Det finns olika priser på en vara neroende på vilket antal man köper.
Jag har sedan en tabell, OSBSTD som innehåller en massa orderrader.
Nu vill jag samköra dessa tabeller och få ut priset på varje orderrad, beroende på antalet.
Jag försöker söka fram det genom att kolla antalet i orderraden dbo.OSBSTD.UCIVQT mot tariffen i prislistan q.OMQTYL.
Själva priset finns i OMSAPR.
Jag får dock inte till det riktigt i q
SELECT (OMSAPR) ger en rad för varje tariffsteg i prislistan och ger mig dubletter.
SELECT MAX (OMSAPR) ger alltid det högsta priset, oavsett antalet i orderraden.
SELECT MIN (OMSAPR) ger ingen rad alls
SELECT q.OMITNO, q.OMSAPR, q.OMPRRF, dbo.OSBSTD.UCCUNO, dbo.OSBSTD.UCITNO, dbo.OSBSTD.UCIVDT, dbo.OSBSTD.UCSUNO,
dbo.OSBSTD.UCSAAM, dbo.OSBSTD.UCOFRA, dbo.OSBSTD.UCUCOS, dbo.OSBSTD.UCIVQT, q.OMQTYL
FROM dbo.OPRICL q INNER JOIN
dbo.OSBSTD ON q.OMITNO = dbo.OSBSTD.UCITNO
GROUP BY q.OMITNO, q.OMSAPR, q.OMPRRF, dbo.OSBSTD.UCCUNO, dbo.OSBSTD.UCITNO, dbo.OSBSTD.UCIVDT, dbo.OSBSTD.UCSUNO,
dbo.OSBSTD.UCSAAM, dbo.OSBSTD.UCOFRA, dbo.OSBSTD.UCUCOS, dbo.OSBSTD.UCIVQT, q.OMQTYL
HAVING (q.OMSAPR IN
(SELECT (OMSAPR)
FROM dbo.OPRICL
WHERE q.OMITNO = dbo.OPRICL.OMITNO AND q.OMPRRF = 'a1' AND q.OMQTYL <= dbo.OSBSTD.UCIVQT)) AND (dbo.OSBSTD.UCIVDT BETWEEN
20050301 AND 20050331) AND (dbo.OSBSTD.UCITNO = '10990001')
ORDER BY dbo.OSBSTD.UCCUNO, dbo.OSBSTD.UCIVDT
SELECT (select max(omsapr)
from dbo.opricl
where OMQTYL > dbo.OSBSTD.UCIVQT
and OMITNO = dbo.OPRICL.OMITNO
and q.OMPRRF = 'a1') price
dbo.OSBSTD.UCCUNO,
dbo.OSBSTD.UCITNO,
dbo.OSBSTD.UCIVDT,
dbo.OSBSTD.UCSUNO,
dbo.OSBSTD.UCSAAM,
dbo.OSBSTD.UCOFRA,
dbo.OSBSTD.UCUCOS,
dbo.OSBSTD.UCIVQT
FROM dbo.OSBSTD
where dbo.OSBSTD.UCIVDT BETWEEN 20050301 AND 20050331
AND dbo.OSBSTD.UCITNO = '10990001'
ORDER BY dbo.OSBSTD.UCCUNO, dbo.OSBSTD.UCIVDT
Varför
where dbo.OSBSTD.UCIVDT BETWEEN 20050301 AND 20050331
?
287 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2