【问题标题】:Convert command from SQL Server to SQLITE将命令从 SQL Server 转换为 SQLITE
【发布时间】:2022-01-10 19:02:05
【问题描述】:

我有这个命令,我想在flutter sqlite上使用它,但它显示错误,因为sqlite中没有DECLARE

DECLARE @totalTable TABLE 
                    (
                        id INTEGER IDENTITY(1, 1), 
                        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 

DECLARE @counterVariable INTEGER, @startLoop INTEGER 

SET @counterVariable = (SELECT COUNT(id) FROM @totalTable) 
SET @startLoop = 1 

WHILE (@startLoop <= @counterVariable) 
BEGIN 
    UPDATE @totalTable 
    SET total = (SELECT SUM(total) FROM Bills 
                 WHERE account_id = (SELECT account_id 
                                     FROM @totalTable 
                                     WHERE id = @startLoop)), 
        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 = @startLoop))) 
    WHERE id = @startLoop 

    SET @startLoop = @startLoop + 1 
END 

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

有没有办法重写这个命令以在 sqlite 中使用?

【问题讨论】:

  • 也没有WHILESET 或@-variables 或IDENTITY() 等......用你用来与sqlite数据库交互的任何语言编写循环逻辑,并让它运行INSERTUPDATEs 和最终的SELECT
  • 好吧,你的意思是 sqlite 只使用主要查询:(

标签: sql sqlite command declare temp


【解决方案1】:

在询问朋友后,我发现这个简短的命令可以得到相同的结果

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

【讨论】:

  • 这与您拥有的 SQL Server 代码无关。如果您得到相同的结果,那是巧合。您的答案中的查询也可以在 SQL Server 中运行。
  • 不,这不是巧合,我将第一个 SQL Server 代码提供给专家,他给了我这个命令,它给了我完全相同的结果。所有命令都有效,但第一个不适用于 sqlite
猜你喜欢
  • 1970-01-01
  • 2020-01-08
  • 2017-05-14
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多