【问题标题】:Access SQL Sub Query Returns 0 when in Visual Studio在 Visual Studio 中访问 SQL 子查询返回 0
【发布时间】: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 &lt;condition&gt; then PlannedAmount else 0 end) as Planned 之类的构造

标签: sql vb.net ms-access


【解决方案1】:

我不知道你的 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"

【讨论】:

    猜你喜欢
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多