Fetch Name basado en IDS separados por comas -- racle campo con plsql camp Relacionados El problema

Fetch name based on comma-separated ids


0
vote

problema

Español

Tengo dos mesas, clientes y productos.

Productos:

  productid name  1        pro1  2        pro2  3        pro3   

Clientes:

  id    name   productid 1     cust1  1,2 2     cust2  1,3 3     cust3     

Quiero seguir el resultado en SELECT DIRECTUY,

  id   name    productid  1  cust1    pro1,pro2  2  cust2    pro1,pro3  3  cust3   

Tengo más de 300 registros en ambas tablas, ¡soy principiante para la codificación de retracción, cualquier ayuda?

Original en ingles

I have two tables, customers and products.

products:

productid name  1        pro1  2        pro2  3        pro3 

customers:

id    name   productid 1     cust1  1,2 2     cust2  1,3 3     cust3   

i want following result in select statement,

id   name    productid  1  cust1    pro1,pro2  2  cust2    pro1,pro3  3  cust3 

i have 300+ records in both tables, i am beginner to back end coding, any help?

     
         
         

Lista de respuestas

2
 
vote

Definitivamente un diseño de base de datos pobre, pero lo malo es que tienes que vivir con eso. Aquí hay una solución que creé usando consulta recursiva. No veo el uso de la tabla product , ya que ya que su requisito no tiene nada que ver con product tabla.

  with      --Expanding each row seperated by comma          tab(col1,col2,col3) as (                                                         Select distinct c.id,c.prdname,regexp_substr(c.productid,'[^,]',1,level)                               from customers c                               connect by regexp_substr(c.productid,'[^,]',1,level) is not null                               order by 1),       --Appending `Pro` to each value                                tab_final as            (  Select col1,col2, case when col3 is not null                                                    then 'pro'||col3                                                   else col3                                                   end col3                             from tab )  --Displaying result as expected                            SELECT     col1,     col2,     LISTAGG(col3,',') WITHIN GROUP( ORDER BY col1,col2 ) col3 FROM     tab_final GROUP BY     col1,     col2   

Demo:

  --Preparing dataset    With                                    customers(id,prdname,productid) as ( Select 1, 'cust1', '1,2' from dual                                UNION ALL                                Select  2,  'cust2','1,3' from dual                                UNION ALL                                Select 3,  'cust3','' from dual),      --Expanding each row seperated by comma                                    tab(col1,col2,col3) as (                                                         Select distinct c.id,c.prdname,regexp_substr(c.productid,'[^,]',1,level)                               from customers c                               connect by regexp_substr(c.productid,'[^,]',1,level) is not null                               order by 1),       --Appending `Pro` to each value                                tab_final as            (  Select col1,col2, case when col3 is not null                                                    then 'pro'||col3                                                   else col3                                                   end col3                             from tab )  --Displaying result as expected                            SELECT     col1,     col2,     LISTAGG(col3,',') WITHIN GROUP( ORDER BY col1,col2 ) col3 FROM     tab_final GROUP BY     col1,     col2   

PS: Mientras usa No se olvide de colocar sus columnas de tabla reales como en mi ejemplo, puede variar.

 

Definitely a poor database design but the bad thing is that you have to live with that. Here is a solution which I created using recursive query. I don't see the use of product table though since your requirement has nothing to do with product table.

with      --Expanding each row seperated by comma          tab(col1,col2,col3) as (                                                         Select distinct c.id,c.prdname,regexp_substr(c.productid,'[^,]',1,level)                               from customers c                               connect by regexp_substr(c.productid,'[^,]',1,level) is not null                               order by 1),       --Appending `Pro` to each value                                tab_final as            (  Select col1,col2, case when col3 is not null                                                    then 'pro'||col3                                                   else col3                                                   end col3                             from tab )  --Displaying result as expected                            SELECT     col1,     col2,     LISTAGG(col3,',') WITHIN GROUP( ORDER BY col1,col2 ) col3 FROM     tab_final GROUP BY     col1,     col2 

Demo:

--Preparing dataset    With                                    customers(id,prdname,productid) as ( Select 1, 'cust1', '1,2' from dual                                UNION ALL                                Select  2,  'cust2','1,3' from dual                                UNION ALL                                Select 3,  'cust3','' from dual),      --Expanding each row seperated by comma                                    tab(col1,col2,col3) as (                                                         Select distinct c.id,c.prdname,regexp_substr(c.productid,'[^,]',1,level)                               from customers c                               connect by regexp_substr(c.productid,'[^,]',1,level) is not null                               order by 1),       --Appending `Pro` to each value                                tab_final as            (  Select col1,col2, case when col3 is not null                                                    then 'pro'||col3                                                   else col3                                                   end col3                             from tab )  --Displaying result as expected                            SELECT     col1,     col2,     LISTAGG(col3,',') WITHIN GROUP( ORDER BY col1,col2 ) col3 FROM     tab_final GROUP BY     col1,     col2 

PS: While using don't forget to put your actual table columns as in my example it may vary.

 
 
         
         

Relacionados problema

0  Problema con unirse a las tablas DB  ( Problem with joining db tables ) 
Tengo problemas al unirte a tablas (Únase a la izquierda) TABLA1: id1 amt1 1 100 2 200 3 300 TABLA2: id2 amt2 1 150 2 250 2 35...

1  Oracle dbms_alert espera retraso  ( Oracle dbms alert waitany delay ) 
Tengo un trabajo, que enviará otros trabajos. He configurado mi procedimiento PL / SQL para registrarse para los trabajos de N usando dbms_alert.registro. Cad...

2  PL / SQL "SQL Command no terminó correctamente" Error  ( Pl sql sql command not properly ended error ) 
Actualmente estoy trabajando en el desarrollo de algunos scripts SQL en el desarrollador de PL / SQL y estoy recibiendo un: comando sql no terminó correcta...

8  Oracle: desambiga entre la mesa y el nombre del esquema  ( Oracle disambiguate between table and schema name ) 
Supongamos que tengo esquemas A y B . En esquema A Me gustaría llamar al paquete X en el esquema B . Sin embargo, existe un paquete B en el esquem...

6  Datos de la unión de los cursores en uno  ( Union data from cursors into one ) 
Tengo un procedimiento almacenado que ejecuta otro procedimiento almacenado varias veces. Necesito unión y devuelva datos, que tengo después de ejecutar el se...

22  PL / SQL PRE-COMPILE Y CÓDIGO CHEQUES DE CALIDAD EN UN AMBIENTES DE CONSTRUCCIÓN AUTOMÁTICADA? [cerrado]  ( Pl sql pre compile and code quality checks in an automated build environment ) 
cerrado. Esta pregunta no cumple con pautas de desbordamiento de pila . Actualmente no está aceptando respuestas. ...

0  Error de Oracle ORA-00922 mientras compila el gatillo  ( Oracle error ora 00922 while compiling trigger ) 
Tengo una columna de tipos de datos varchar2 en una tabla. El usuario solo puede insertar el número en esa columna y no quiero cambiar como número. A veces, a...

1  Compruebe la restricción (o algo mejor)  ( Check constraint or something better ) 
La situación: hay una aplicación Java que lee los datos de un DB Oracle. Para simplificar, el campo Correo electrónico se lee actualmente de una tabla "Usuari...

8  Oracle Build Order y PAPES PAQUETES DEPENDENCIENCIAS DE PLA / SQL  ( Oracle build order and pl sql package dependencies ) 
Estoy tratando de crear una lista de dependencias del paquete PL / SQL para que pueda ayudar a configurar un script de compilación automatizado para que mis p...

3  ¿Cómo saber en qué columna se aplica la secuencia?  ( How to know on which column the sequence is applied ) 
Tengo que buscar todas las secuencias con su nombre de tabla junto con el nombre de la columna en la que se aplica la secuencia .Some cómo me las arreglé para...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos