我在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
我不知道你的VS版本,在它的最新版本中,你可以在下一行继续你的字符串而不做任何事情,但是最好指定你想在下一行继续你的命令,所以这里是你的代码修复:
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"