【发布时间】:2018-09-05 21:50:05
【问题描述】:
我在 Access 数据库中运行以下 SQL,并从子查询返回结果。
Select b.PlannedDescription ,
(SELECT SUM(c.PlannedAmount) FROM DT_PLANNED_TRANSACTION c
WHERE(c.PlannedDate)>=#2018/08/01# And (c.PlannedDate)<=#2018/09/05#
And c.PlannedDescription = b.PlannedDescription
And (c.PlannedType)='P'
) AS [Planned],
(SELECT SUM(a.PlannedAmount) As Amount FROM DT_PLANNED_TRANSACTION A
WHERE(a.PlannedDate)>=#2018/08/01# And (a.PlannedDate)<=#2018/09/05#
And a.PlannedDescription = b.PlannedDescription
And (a.PlannedType)='A'
) AS [Actual]
From DT_PLANNED_TRANSACTION As b
Where ((b.PlannedType) ='A' AND (b.PlannedDate)>=#2018/08/01# And (b.PlannedDate)<=#2018/09/05#)
GROUP BY b.PlannedDescription
当我在 Visual Studio 中运行它时,子查询返回 0?
Public Sub uspLoad(ByVal DateFrom As Date, ByVal DateTo As Date)
ds.Tables.Add("tbComparison")
ds.Tables("tbComparison").Columns.Add("PlannedDescription", GetType(String))
ds.Tables("tbComparison").Columns.Add("Planned", GetType(Decimal))
ds.Tables("tbComparison").Columns.Add("Actual", GetType(Decimal))
Dim connectionString As String = My.Settings.ConnString
Dim sql As String =
"Select b.PlannedDescription,
(SELECT SUM(c.PlannedAmount) FROM DT_PLANNED_TRANSACTION c
WHERE(c.PlannedDate)>=#" & Format(DateFrom, "yyyy/MM/dd") & "# And (c.PlannedDate)<=#" & Format(DateTo, "yyyy/MM/dd") & "#
And c.PlannedDescription = b.PlannedDescription
And (c.PlannedType)='P'
) AS [Planned],
(SELECT SUM(a.PlannedAmount) FROM DT_PLANNED_TRANSACTION A
WHERE(a.PlannedDate)>=#" & Format(DateFrom, "yyyy/MM/dd") & "# And (a.PlannedDate)<=#" & Format(DateTo, "yyyy/MM/dd") & "#
And a.PlannedDescription = b.PlannedDescription
And (a.PlannedType)='A'
) AS [Actual]
From DT_PLANNED_TRANSACTION As b
Where ((b.PlannedType) ='A' AND (b.PlannedDate)>=#" & Format(DateFrom, "yyyy/MM/dd") & "# And (b.PlannedDate)<=#" & Format(DateTo, "yyyy/MM/dd") & "#)
GROUP BY b.PlannedDescription"
Dim connection As New OleDbConnection(connectionString)
Dim dataadapter As New OleDbDataAdapter(sql, connection)
connection.Open()
dataadapter.Fill(ds, "tbComparison")
connection.Close()
DataGridView1.DataSource = ds.Tables("tbComparison")
我已尝试强制转换返回的值,但它仍然不起作用。我还认为它可能是 datagridview,但数据集也返回零。有什么想法吗?
TIA
【问题讨论】:
-
您是否尝试过使用日期参数,这样您就不必尝试手动设置日期格式?此外,除了执行子查询之外,您还可以单次遍历表,并使用
sum(case when <condition> then PlannedAmount else 0 end) as Planned之类的构造