es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Añadiendo una columna calculada utilizando tablas diferentes en SQL

Soy nuevo en SQL, así que por favor se paciente conmigo.

Estoy tratando de agregar una columna calculada llamada InvoiceAmount a mi tabla CompanyInvoice.

Mi tabla actualmente tiene las siguientes columnas:

CREATE TABLE CompanyInvoice
(
    InvoiceID        CHAR(5) NOT NULL,
    CompanyAccountID CHAR(5) NOT NULL 
        CONSTRAINT FK_CompanyInvoice_CompanyAccount    
            FOREIGN KEY REFERENCES CompanyAccount(CompanyAccountID) 
                    ON UPDATE CASCADE,
    CompanyID        CHAR(5) NOT NULL 
        CONSTRAINT FK_CompanyInvoice_ProductionCompany 
            FOREIGN KEY REFERENCES ProductionCompany(CompanyID), 
    BookingID        CHAR(5) NOT NULL 
        CONSTRAINT FK_CompanyInvoice_EventBooking      
            FOREIGN KEY REFERENCES EventBooking (BookingID),
    TheatreID        CHAR(5) NOT NULL 
        CONSTRAINT FK_CompanyInvoice_Theatre           
            FOREIGN KEY REFERENCES Theatre(TheatreID)
                    ON UPDATE CASCADE
);

Me gustaría agregar una nueva columna que calcule el monto de la factura; este monto se calcula en función de la duración del evento (la columna EventDuration se encuentra en una tabla llamada Event) y el TheatreID, por ejemplo, si TheatreID=1, entonces EventDuration x 300, si TheatreID=2, entonces EventDuration x 1000.

Muchas gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para agregar una columna calculada InvoiceAmount a tu tabla CompanyInvoice, puedes usar la siguiente declaración SQL:

    ALTER TABLE CompanyInvoice ADD InvoiceAmount DECIMAL(10,2) NOT NULL;
    

    Esto agrega una nueva columna no nula llamada InvoiceAmount del tipo de dato DECIMAL.

    Para calcular el monto de la factura para cada fila basado en EventDuration y TheatreID, puedes utilizar una sentencia CASE en una consulta UPDATE:

    UPDATE CompanyInvoice
    SET InvoiceAmount = CASE
        WHEN TheatreID = 1 THEN EventDuration * 300
        WHEN TheatreID = 2 THEN EventDuration * 1000
        ELSE 0 -- o cualquier valor predeterminado que desees
    END;
    

    Esto establece el valor de InvoiceAmount para cada fila según el valor de TheatreID y EventDuration.

    Ten en cuenta que necesitarás unir la tabla CompanyInvoice con la tabla EventBooking para obtener el valor de EventDuration para cada fila.

    Además, asegúrate de probar tu consulta antes de ejecutarla en tu base de datos de producción y realiza una copia de seguridad de tus datos antes de realizar cualquier cambio.

Comments are closed.