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.

Convertir comando de SQL Server a SQLITE

Tengo este comando y quiero usarlo en flutter sqlite pero muestra un error porque no hay DECLARE en sqlite.

CREATE TABLE totalTable 
                    (
                        id INTEGER PRIMARY KEY AUTOINCREMENT, 
                        account_id INTEGER, 
                        title TEXT, 
                        account_number TEXT, 
                        client_name TEXT, 
                        total REAL
                    );

INSERT INTO totalTable (account_id, title, account_number) 
    SELECT id, title, account_number 
    FROM Accounts;

WITH RECURSIVE counter AS (
    SELECT COUNT(id) AS count FROM totalTable
), startLoop AS (
    SELECT 1 AS start FROM counter
), loop(start) AS (
    SELECT start + 1 FROM startLoop
    UNION ALL
    SELECT start + 1 FROM loop WHERE start + 1 <= (SELECT count FROM counter)
)
UPDATE totalTable 
    SET total = (
        SELECT SUM(total) FROM Bills 
        WHERE account_id = (
            SELECT account_id 
            FROM totalTable 
            WHERE id = loop.start
        )
    ), 
    client_name = (
        SELECT client_name FROM Clients 
        WHERE id = (
            SELECT MIN(client_id) 
            FROM Bills 
            WHERE account_id = (
                SELECT MIN(account_id) 
                FROM totalTable 
                WHERE id = loop.start
            )
        )
    )
    WHERE id = loop.start;

SELECT account_id, title, client_name, account_number, total 
FROM totalTable;

¿Hay alguna forma de reescribir este comando para usarlo en sqlite?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Lamentablemente, no hay una forma directa de reescribir este comando para usar en SQLite ya que no soporta la palabra clave DECLARE para crear variables o tablas temporales. Sin embargo, puedes lograr el mismo resultado utilizando subconsultas y declaraciones de unión en SQLite. Aquí tienes un ejemplo de consulta que logra el mismo resultado:

    SELECT A.id AS account_id, A.title, 
           B.client_name, A.account_number, 
           SUM(B.total) AS total
    FROM Accounts AS A
    LEFT JOIN (
        SELECT account_id, client_name, 
               SUM(total) AS total
        FROM Bills
        LEFT JOIN Clients ON Bills.client_id = Clients.id
        GROUP BY account_id
    ) AS B
    ON A.id = B.account_id
    GROUP BY A.id
    

    Esta consulta une la tabla Accounts con la subconsulta Bills que calcula la suma de la columna total para cada account_id y el correspondiente client_name de la tabla Clients. La tabla resultante se agrupa por el account_id y la función de agregación SUM se utiliza para calcular el total de cada cuenta.

Comments are closed.