Access SQL Sub Query在Visual Studio中返回0

问题描述 投票:0回答:1

我在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

sql vb.net access
1个回答
0
投票

我不知道你的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"
© www.soinside.com 2019 - 2024. All rights reserved.