webForumDet fria alternativet

Tariffer i prislista som ska kopplas

Databaser & SQLur Databashanterare & SQL

1 svar · 501 visningar · startad av wazid

wazidMedlem sedan maj 2001156 inlägg
#1

Hej

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

Tacksam för tips....

LarsGMedlem sedan dec. 200012 464 inlägg
#2
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

?

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