10 campo calculado para cada fila -- sql campo con oracle camp Relacionados El problema

10 calculated field for each row


0
vote

problema

Español

Necesito escribir una consulta que muestre todas las cuentas de cuenta y luego debo mostrar los siguientes 10 saldos de cierre de los próximos 10 días desde una sesión de inicio específica.

Tengo una dimensión con cuentas, una dimensión con fechas y una tabla de saldo de hechos que almacena el saldo de apertura y cierre para cada una de las cuentas.

La salida necesita verse así:

Bank_Name | Account_nr | Cb date1 | Cb date1 +1 | Cb date1 +2 .... | hasta 10

He intentado escribir una consulta como esta:

      select information.bankname,information.branchname,information.holdername,information.accountnumber, information.CURRENCY, CB1.amount1, CB2.amount2, CB3.amount3, CB4.amount4, CB5.amount5, CB6.amount6, CB7.amount7,  CB8.amount8, CB9.amount9, CB10.amount10 from  --eerste gegevens selecteren (select a.BANK_NAME bankname, a.BRANCH_NAME branchname, a.HOLDER_NAME holdername, a.ACCOUNT_NUMBER accountnumber, a.CURRENCY currency --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and ) information,  (select FACT_AS_BALANCE.CB_AMOUNT amount1 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD'))) CB1,  (select FACT_AS_BALANCE.CB_AMOUNT amount2 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 1)) CB2,  (select FACT_AS_BALANCE.CB_AMOUNT amount3 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 2)) CB3,  (select FACT_AS_BALANCE.CB_AMOUNT amount4 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 3)) CB4,  (select FACT_AS_BALANCE.CB_AMOUNT amount5 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 4)) CB5,  (select FACT_AS_BALANCE.CB_AMOUNT amount6 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 5)) CB6,  (select FACT_AS_BALANCE.CB_AMOUNT amount7 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 6)) CB7,  (select FACT_AS_BALANCE.CB_AMOUNT amount8 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 7)) CB8,  (select FACT_AS_BALANCE.CB_AMOUNT amount9 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 8)) CB9,  (select FACT_AS_BALANCE.CB_AMOUNT amount10 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 9)) CB10;   

No sé si esta es la forma correcta de hacer esto. Pero realmente no veo ninguna otra forma.

¿Cómo puedo hacer esto?

Original en ingles

I need to write a query that shows all the accountnumbers and then I need to show the next 10 closing balances from the next 10 days from a specific startdate.

I have a dimension with accounts, a dimension with dates and a fact balance table that stores the opening and closing balance for each of the accounts.

The output needs to look like this:

BANK_NAME | ACCOUNT_NR | CB DATE1 | CB DATE1 +1 | CB DATE1 +2 .... | untill 10

I've tried to write a query like this:

    select information.bankname,information.branchname,information.holdername,information.accountnumber, information.CURRENCY, CB1.amount1, CB2.amount2, CB3.amount3, CB4.amount4, CB5.amount5, CB6.amount6, CB7.amount7,  CB8.amount8, CB9.amount9, CB10.amount10 from  --eerste gegevens selecteren (select a.BANK_NAME bankname, a.BRANCH_NAME branchname, a.HOLDER_NAME holdername, a.ACCOUNT_NUMBER accountnumber, a.CURRENCY currency --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and ) information,  (select FACT_AS_BALANCE.CB_AMOUNT amount1 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD'))) CB1,  (select FACT_AS_BALANCE.CB_AMOUNT amount2 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 1)) CB2,  (select FACT_AS_BALANCE.CB_AMOUNT amount3 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 2)) CB3,  (select FACT_AS_BALANCE.CB_AMOUNT amount4 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 3)) CB4,  (select FACT_AS_BALANCE.CB_AMOUNT amount5 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 4)) CB5,  (select FACT_AS_BALANCE.CB_AMOUNT amount6 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 5)) CB6,  (select FACT_AS_BALANCE.CB_AMOUNT amount7 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 6)) CB7,  (select FACT_AS_BALANCE.CB_AMOUNT amount8 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 7)) CB8,  (select FACT_AS_BALANCE.CB_AMOUNT amount9 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 8)) CB9,  (select FACT_AS_BALANCE.CB_AMOUNT amount10 --relaties worden gelegd from DIM_ACCOUNT a, FACT_AS_BALANCE b, DIM_DATE d  where b.balance_date_id = d.ID and b.account_id = a.ID and (d.CAL_DATE = TO_DATE ('20130101', 'YYYYMMDD') + 9)) CB10; 

I don't know if this is the correct way of doing this. But I really don't see any other way.

How can i do this ?

     

Lista de respuestas

1
 
vote

Si está en Oracle 11+, puede usar la cláusula NULL9 , algo a lo largo de estas líneas:

  [HttpGet]0  

Sin probar, ya que no hay datos de muestra para ir. Esto debe generar dinámicamente columnas para todas las fechas.
(Tenga en cuenta que estoy en contra del uso de [HttpGet]1111 , pero no estoy seguro de que no especifique las columnas pivotadas todavía las incluirán, no es como si necesariamente podríamos adivinar los nombres de las columnas ...) < / p>

 

If you're on Oracle 11+, you can use the PIVOT clause, something along these lines:

WITH Date_Range as (SELECT id, cal_Date                     FROM dim_Date                     WHERE cal_Date >= TO_DATE('20130101', 'yyyymmdd')                           AND cal_Date < TO_DATE('20130101', 'yyyymmdd') + 10) SELECT * FROM (SELECT Account.bank_name, Account.branch_name,               Account.holder_name, Account.account_number,              Account.currency, Balance.cb_amount, Date_Range.cal_Date       FROM dim_Account Account       JOIN fact_as_Balance Balance         ON Balance.account_id = Account.id       JOIN Date_Range            ON Date_Range.id = Balance.balance_date_id) Information PIVOT(MAX(cb_amount)) FOR cal_Date IN (SELECT cal_Date FROM Date_Range) 

Untested, as there's no sample data to go off of. This should dynamically generate columns for all dates.
(Note that I'm against the use of SELECT *, but I'm unsure if not specifying the pivoted columns will still include them - it's not like we could necessarily guess the column names...)

 
 
0
 
vote

creo que quieres algo como esto:

  [HttpGet]2  
 

I think you want something like this:

SELECT      a.bank_name bankname,      a.branch_name branchname,      a.holder_name holdername,      a.account_number accountnumber,      a.currency currency,     SUM(CASE WHEN d.cal_date = to_date ('20130101', 'yyyymmdd')              THEN fact_as_balance.cb_amount               ELSE 0 end) amount1,     SUM(CASE WHEN d.cal_date = to_date ('20130101', 'yyyymmdd') + 1              THEN fact_as_balance.cb_amount               ELSE 0 end) amount2,     SUM(CASE WHEN d.cal_date = to_date ('20130101', 'yyyymmdd') + 1              THEN fact_as_balance.cb_amount               ELSE 0 end) amount3,     (continue for columns 4-10) FROM      dim_account a     JOIN fact_as_balance b ON a.id = b.account_id     JOIN dim_date d ON b.balance_date_id = d.id  GROUP BY         a.bank_name bankname,      a.branch_name branchname,      a.holder_name holdername,      a.account_number accountnumber,      a.currency currency 
 
 
 
 

Relacionados problema

1  Error ORA-01406 al obtener valores usando OCI  ( Ora 01406 error when fetching values using oci ) 
Esto ocurre cuando obtiene valores que tienen una longitud máxima de 50, a un tampón que solo podía contener 30 caracteres. Ya he buscado el error y encontr...

50  CX_ORACE: ¿Cómo lo hago en un conjunto de resultados?  ( Cx oracle how do i iterate over a result set ) 
Hay varias formas de iterar sobre un conjunto de resultados. ¿Cuál es la compensación de cada uno? ...

1  Oracle: Cómo agregar un nodo de texto a un elemento existente  ( Oracle how to add a text node into an existing element ) 
en Oracle, puedes escribir: update t set xml = updateXML(xml, '/a/b/text()', 'gaga') Esto funciona solo si ya tiene algún texto en el elemento <b> . C...

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

1  Oracle: Cómo crear un elemento en un espacio de nombres específico con XMLelement ()  ( Oracle how to create an element in a specific namespace with xmlelement ) 
En Oracle, puede usar el XMlelement () Función para crear un elemento, como en: XMLElement('name', 'John') ¿Pero cómo crear un elemento en un espacio...

32  ¿Hay alguna manera de que el grupo de conexiones de JBoss se vuelva a conectarse a Oracle cuando las conexiones vayan mal?  ( Is there any way to have the jboss connection pool reconnect to oracle when conn ) 
Tenemos nuestro JBoss y Oracle en servidores separados. Las conexiones parecen ser eliminadas y están causando problemas con JBoss. ¿Cómo puedo hacer que el J...

125  ¿Hay un sistema de control de versiones para los cambios de la estructura de la base de datos?  ( Is there a version control system for database structure changes ) 
A menudo me encuentro con el siguiente problema. Trabajo en algunos cambios en un proyecto que requiere nuevas tablas o columnas en la base de datos. Hago l...

2  Nombres de tablas, y bucle para describir  ( Table names and loop to describe ) 
trabajando en Oracle 10g. Manera fácil de listar todos los nombres de las mesas (seleccione Table_Name de DBA_Tables donde el propietario = 'me') Pero ahora q...

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

17  Cómo encontrar filas bloqueadas en Oracle  ( How to find locked rows in oracle ) 
Tenemos una base de datos Oracle, y la tabla de cuentas del cliente tiene aproximadamente un millón de filas. A lo largo de los años, hemos construido cuatro ...




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