Access SQL Sub Query Возвращает 0, когда в Visual Studio - PullRequest
0 голосов
/ 06 сентября 2018

Я запускаю следующий SQL в базе данных Access, и результаты возвращаются из подзапросов.

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")

Я пытался привести возвращаемые значения, но он все еще не работает. Я также подумал, что это может быть представление данных, но набор данных также возвращает нули. Есть идеи?

ТИА

1 Ответ

0 голосов
/ 06 сентября 2018

Я не знаю вашу версию 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"
...