【问题标题】:Create a view processing the original table using sqlite db使用 sqlite db 创建处理原始表的视图
【发布时间】:2014-11-18 07:46:03
【问题描述】:

我正在开发一个 C# Winforms 应用程序并尝试使用以下表结构在 sqlite 中创建一个视图:

这就是视图的样子:

这是 sql 命令,但不会产生所希望的视图:

SELECT tbl1.Time AS C1,
(SELECT MIN(Value) FROM tbl1 AS T WHERE Time = T.Time AND T.VarId = 2) AS C2, 
(SELECT MIN(Value) FROM tbl1 AS T WHERE Time = T.Time AND T.VarId = 3) AS C3,
(SELECT MIN(Value) FROM tbl1 AS T WHERE Time = T.Time AND T.VarId = 4) AS C4, 
(SELECT MIN(Value) FROM tbl1 AS T WHERE Time = T.Time AND T.VarId = 5) AS C5,
(SELECT MIN(Value) FROM tbl1 AS T WHERE Time = T.Time AND T.VarId = 6) AS C6, 
(SELECT MIN(Value) FROM tbl1 AS T WHERE Time = T.Time AND T.VarId = 7) AS C7
FROM tbl1
WHERE tbl1.VarId IN (1, 2, 3, 4, 5, 6, 7)
GROUP BY tbl1.Time
ORDER BY tbl1.Time

非常感谢任何帮助。

【问题讨论】:

    标签: c# sql sqlite


    【解决方案1】:

    在子查询中,没有表名的列名(如Time)指的是最内层表,在本例中为T。 这意味着Time = T.Time 被解释为T.Time = T.Time

    对于关联子查询,必须比较内表的一列 (T.Time) 和外表的一列 (tbl1.Time):

    SELECT tbl1.Time AS Time,
    (SELECT MIN(Value) FROM tbl1 AS T WHERE T.Time = tbl1.Time AND T.VarId = 1) AS C1,
    (SELECT MIN(Value) FROM tbl1 AS T WHERE T.Time = tbl1.Time AND T.VarId = 2) AS C2,
    (SELECT MIN(Value) FROM tbl1 AS T WHERE T.Time = tbl1.Time AND T.VarId = 3) AS C3,
    (SELECT MIN(Value) FROM tbl1 AS T WHERE T.Time = tbl1.Time AND T.VarId = 4) AS C4,
    (SELECT MIN(Value) FROM tbl1 AS T WHERE T.Time = tbl1.Time AND T.VarId = 5) AS C5,
    (SELECT MIN(Value) FROM tbl1 AS T WHERE T.Time = tbl1.Time AND T.VarId = 6) AS C6,
    (SELECT MIN(Value) FROM tbl1 AS T WHERE T.Time = tbl1.Time AND T.VarId = 7) AS C7,
    (SELECT MIN(Value) FROM tbl1 AS T WHERE T.Time = tbl1.Time AND T.VarId = 8) AS C8,
    (SELECT MIN(Value) FROM tbl1 AS T WHERE T.Time = tbl1.Time AND T.VarId = 9) AS C9,
    tbl1.Method AS Method    -- ???
    FROM tbl1
    GROUP BY tbl1.Time
    ORDER BY tbl1.Time
    

    【讨论】:

    • 但是,当我在原始表中使用它而不是在上面的演示表中时,查询需要一段时间才能执行。
    • 优化查询是一个不同的问题。 (但您可能只需要 Time 列上的索引。)
    • 嗨 CL 我必须修改视图,新要求是从另一个表中获取 varId 和 C1、C2...。有什么提示吗?
    • 提示:请阅读“添加评论”链接的工具提示。然后点击“”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2020-01-11
    • 2020-09-16
    相关资源
    最近更新 更多