webForumDet fria alternativet

Endast en rad i subquery (oracle)

Databaser & SQLur Databashanterare & SQL

9 svar · 527 visningar · startad av yohpops

Medlem sedan feb. 20011 198 inlägg
Frågan#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.

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

eller

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

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

Medlem sedan dec. 200012 464 inlägg
#4

Varför skulle det inte fungera?

Medlem 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?

Medlem 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.

Medlem 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?".

Medlem 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)
Medlem 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.

Medlem 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..

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