C# 使用sqlite db创建处理原始表的视图

C# 使用sqlite db创建处理原始表的视图,c#,sql,sqlite,C#,Sql,Sqlite,我正在处理一个WinC窗体应用程序,并尝试使用以下表结构在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) A

我正在处理一个WinC窗体应用程序,并尝试使用以下表结构在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

非常感谢您的帮助。

在子查询中,没有像Time这样的表名的列名指的是最里面的表,在本例中是T。 这意味着时间=T。时间被解释为T。时间=T。时间

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

选择tbl1.Time作为时间, 从tbl1中选择MINValue作为T,其中T.Time=tbl1.Time,T.VarId=1作为C1, 从tbl1中选择MINValue作为T,其中T.Time=tbl1.Time,T.VarId=2作为C2, 从tbl1中选择MINValue作为T,其中T.Time=tbl1.Time,T.VarId=3作为C3, 从tbl1中选择MINValue作为T,其中T.Time=tbl1.Time,T.VarId=4作为C4, 从tbl1中选择MINValue作为T,其中T.Time=tbl1.Time,T.VarId=5作为C5, 从tbl1中选择MINValue作为T,其中T.Time=tbl1.Time,T.VarId=6作为C6, 从tbl1中选择MINValue作为T,其中T.Time=tbl1.Time,T.VarId=7作为C7, 从tbl1中选择MINValue作为T,其中T.Time=tbl1.Time,T.VarId=8作为C8, 从tbl1中选择MINValue作为T,其中T.Time=tbl1.Time,T.VarId=9作为C9, tbl1.方法作为方法-??? 来自tbl1 按tbl1分组。时间 按tbl1订购。时间
然而,当我在我的原始表中使用它时,而不是在上面的演示表中,查询需要一段时间才能执行。优化查询是另一个问题。但是你可能只需要时间列上的一个索引。嗨,我必须修改视图,新的要求是得到变量和C1,C2。。。从另一张桌子。任何提示?提示:请阅读添加注释链接的工具提示。然后单击“提问”。