webForumDet fria alternativet

Endast en rad i subquery (oracle)

9 svar · 527 visningar · startad av yohpops

yohpopsMedlem sedan feb. 20011 198 inlägg
#1

Hej.

Jag har följande lilla fråga

SELECT 
  DISTINCT b.SDORNO,
  b.SDCUOR,
  b.SDORST,
  b.SDORSL,
  b.SDYREF as "Beställare",
  b.SDPHNO as "Beställare-telefon",
  a.SYZDVA AS "Kommstatus",
  a.SYSRES AS "Team",
  (SELECT 'X' FROM cusjdta.ztshis c WHERE c.syzdva = '49' AND a.sycono = c.sycono AND a.syorno = c.syorno AND ((a.syrgdt*1000000)+a.syrgtm) > ((c.syrgdt*1000000)+c.syrgtm) and c.syrgdt = (SELECT max(e.syrgdt) FROM cusjdta.ztshis e WHERE e.syzdva = '49' AND a.sycono = e.sycono AND a.syorno = e.syorno )
   and a.syrgdt = (SELECT max(f.syrgdt) FROM cusjdta.ztshis f WHERE f.syzdva = '20' AND a.sycono = f.sycono AND a.syorno = f.syorno )
  ) AS "Markering",
  (SELECT SEZOBJ FROM cusjdta.ZSJOBH z WHERE b.sdcono = z.secono AND b.sdorno = z.seorno AND z.SEJOBN = '001' AND z.SEJBSX = '00') AS "ObjektID",
  (SELECT SEJBSE FROM cusjdta.ZSJOBH z WHERE b.sdcono = z.secono AND b.sdorno = z.seorno AND z.SEJOBN = '001' AND z.SEJBSX = '00') AS "Tilläggsstatus", 
  b.SDCFDA, b.SDCFTM FROM cusjdta.ztshis a, cusjdta.zshead b WHERE a.sycono = 101 AND
  a.syzdva = '20' AND
  b.sdorsl < '49' AND
  a.sycono = b.sdcono AND
  a.syorno = b.sdorno AND
  NOT EXISTS ( SELECT 0 FROM cusjdta.ztshis c WHERE c.syzdva IN ('15', '85') AND
  a.sycono = c.sycono AND
  a.syorno = c.syorno AND
  ((a.syrgdt*1000000)+a.syrgtm) < ((c.syrgdt*1000000)+c.syrgtm) )
ORDER BY b.sdorsl, b.sdorno

och vill lägga till detta mellan "markering" och "objektid"

  (SELECT  TLTX60 FROM   mvxjdta.osytxl WHERE   tlcono = b.sdcono AND tldivi = b.sddivi AND  tltxid = b.sdtxid and tltxvr='SO79' and tllino <= 1) as "SO79" ,

Hur skriver jag för att subqueryn endast ska hämta en rad?
Jag har provat med rownum och limit men får felmeddelande.
rownum fungerar om jag kör frågan för sig.

Det fungerar inte att använda "order by" heller.

LarsGMedlem sedan dec. 200012 464 inlägg
#2
(select min(TLTX60) ...

eller

(select max(TLTX60) ...
yohpopsMedlem sedan feb. 20011 198 inlägg
#3

Funkar verkligen det?
TLTX60 är ett varchar fält.

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Varför skulle det inte fungera?

K@llenMedlem sedan mars 20032 667 inlägg
#5

LarsG skrev:

Varför skulle det inte fungera?

Fungerar säkert, du brukar Veta. Dumma frågor. Av ren nyfikenhet: hur får man fram max eller min på en sträng? Eller förutsätts det att varchar-fältet innehåller numeriska värden?

LarsGMedlem sedan dec. 200012 464 inlägg
#6

Tja, ... 0 < 1 < ... < 9 < ... < A < B < C ...

applicera detta tecken för tecken. Numeriska värden i varcharkolumner sorteras alltså inte med avseende på det numeriska värdet.

Det går att ändra den sorteringen med collations.

yohpopsMedlem sedan feb. 20011 198 inlägg
#7

max eller min kommer ge fel rad.

Tabeller osytxl innerhåller textblock uppdelat på olika rader, med olika textradnummer, språkid, textid, textblockid osv.
Ex

tltx60	tllino	tltxid	tltxvr
Jag	1	1234	SO79
heter	2	1234	SO79
Johan	3	1234	SO79
Vad	1	4321	SO79
heter	2	4321	SO79
Du?	3	4321	SO79

Jag vill ha första raden, alltså "Jag".
Om jag använder max får jag "Vad" och min ger "Du?".

LarsGMedlem sedan dec. 200012 464 inlägg
#8

då får du istället lägga till villkoret

and tllino = (select min(tllino)
 from osytxl q
 where q.tltxid = osytxl.tlxtid
     and q.tltxvr = osytxl.tltxvr)
yohpopsMedlem sedan feb. 20011 198 inlägg
#9

LarsG skrev:

då får du istället lägga till villkoret

and tllino = (select min(tllino)
 from osytxl q
 where q.tltxid = osytxl.tlxtid
     and q.tltxvr = osytxl.tltxvr)

Detta ska jag testa.

yohpopsMedlem sedan feb. 20011 198 inlägg
#10

Det funkar inte.

Fick felmeddelande, men inget sql-syntax fel.

Återkommer med felmeddelandet.
Det tar ca: 40 minuter att få svar på frågan.
Inte så kul att felsöka den..

/RED:
Felmeddelandet:

The following error has occurred:
ORA-01652: unable to extend temp segment by 256 in tablespace TEMP_USER

Får inget fel om jag tar bort subqueryn..

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