/ / Compter les nombres consécutifs en une seule ligne - oracle

Compter des nombres consécutifs dans une seule ligne - oracle

J'ai récemment découvert que nous pouvons utiliser Max (Decode ()) fonction d'Oracle pour faire pivoter les résultats d'une table. Je l'ai bien exécuté. Cependant, pivoter une table n'est qu'une partie de la solution dont j'ai besoin. La fonction pivotante se traduit par quelque chose comme ceci:

01,02,03,05,06,07,08,09,10,11,12,13,14,16,17,20,21,23,25

Ce dont j'ai réellement besoin est quelque chose comme ceci:

1-17, 20-21,23,25

Je ne sais vraiment pas comment commencer à résoudre ce problème mais jusqu'à présent, j'ai la requête ci-dessous:

SELECT DISTINCT
MAX(DECODE(wldw.wafernumber,"01", "01"))
|| MAX(DECODE(wldw.wafernumber,"02", ",02"))
|| MAX(DECODE(wldw.wafernumber,"03", ",03"))
|| MAX(DECODE(wldw.wafernumber,"04", ",04"))
|| MAX(DECODE(wldw.wafernumber,"05", ",05"))
|| MAX(DECODE(wldw.wafernumber,"06", ",06"))
|| MAX(DECODE(wldw.wafernumber,"07", ",07"))
|| MAX(DECODE(wldw.wafernumber,"08", ",08"))
|| MAX(DECODE(wldw.wafernumber,"09", ",09"))
|| MAX(DECODE(wldw.wafernumber,"10", ",10"))
|| MAX(DECODE(wldw.wafernumber,"11", ",11"))
|| MAX(DECODE(wldw.wafernumber,"12", ",12"))
|| MAX(DECODE(wldw.wafernumber,"13", ",13"))
|| MAX(DECODE(wldw.wafernumber,"14", ",14"))
|| MAX(DECODE(wldw.wafernumber,"15", ",15"))
|| MAX(DECODE(wldw.wafernumber,"16", ",16"))
|| MAX(DECODE(wldw.wafernumber,"17", ",17"))
|| MAX(DECODE(wldw.wafernumber,"18", ",18"))
|| MAX(DECODE(wldw.wafernumber,"19", ",19"))
|| MAX(DECODE(wldw.wafernumber,"20", ",20"))
|| MAX(DECODE(wldw.wafernumber,"21", ",21"))
|| MAX(DECODE(wldw.wafernumber,"22", ",22"))
|| MAX(DECODE(wldw.wafernumber,"23", ",23"))
|| MAX(DECODE(wldw.wafernumber,"24", ",24"))
|| MAX(DECODE(wldw.wafernumber,"25", ",25"))  AS WAFERS
, "history" as well
FROM a_wiplothistory wl
JOIN Container C ON (wl.containerid = c.containerid OR wl.containerid= c.splitfromid )
JOIN a_wiplotdetailshistory wld ON wl.wiplothistoryid = wld.wiplothistoryid
JOIN a_wiplotdetailswafershistory wldw ON wld.wiplotdetailshistoryid = wldw.wiplotdetailshistoryid
WHERE c.containername = :lot

Merci d'avoir aidé les gars.

Réponses:

0 pour la réponse № 1
SELECT DISTINCT
MAX(CASE WHEN wldw.wafernumber BETWEEN "01" AND "17" THEN "01-17" END)
|| MAX(DECODE(wldw.wafernumber,"18", ",18"))
|| MAX(DECODE(wldw.wafernumber,"19", ",19"))
|| MAX(CASE WHEN wldw.wafernumber IN ("20","21") THEN "20-21" END)
|| MAX(DECODE(wldw.wafernumber,"21", ",21"))
|| MAX(DECODE(wldw.wafernumber,"22", ",22"))
|| MAX(DECODE(wldw.wafernumber,"23", ",23"))
|| MAX(DECODE(wldw.wafernumber,"24", ",24"))
|| MAX(DECODE(wldw.wafernumber,"25", ",25"))  AS WAFERS
, "history" as well