0

我们正在使用 VB .NET 和 2.0 .NET 框架连接到专有的 ODBC 源。我们正在提取余额字段(其中正值是借方,负值是贷方)以及其他信息。

由于不支持大小写,因此无法进行以下查询:

Dim strQuery As String = "SELECT ACCOUNT_REF, " + _
"CASE WHEN [BALANCE] < 0 THEN BALANCE ELSE NULL END, " + _
"CASE WHEN [BALANCE] > 0 THEN BALANCE ELSE NULL END " + _
"FROM TABLE1 WHERE BALANCE <> 0"

使用 DataSet 时,我们可以将 Balance 列一分为二吗?如果有,有什么例子吗?

我们正在使用以下代码来构建我们的数据集(因为此专有实现不支持大小写):

        Dim strQuery = "Select ACCOUNT_REF, BALANCE FROM TABLE1 WHERE BALANCE <> 0"
        Using connection
            Using adapter As New Odbc.OdbcDataAdapter(strQuery, connection)
                Dim ds As New DataSet()
                adapter.Fill(ds)
            End Using
        End Using

任何帮助将不胜感激。谢谢你。

4

2 回答 2

1

你有没有尝试过:

SELECT Account_Ref, Balance as Debits, NULL as Credits
FROM Table1
WHERE Balance < 0
UNION ALL
SELECT Account_Ref, NULL as Debits, Balance as Credits
FROM Table1
WHERE Balance > 0

笨重,但可能支持 UNION 或 UNION ALL 而 CASE 不支持。

于 2012-12-28T15:19:17.707 回答
1

我很惊讶地看到 VB.NET 下的 ODBC 不支持这种情况。我对 VB.NET 了解不多,但也许是因为您忘记为您的案例命名?尝试:

Dim strQuery As String = "SELECT ACCOUNT_REF, " + _
"CASE WHEN [BALANCE] < 0 THEN BALANCE ELSE NULL END as Debits, " + _
"CASE WHEN [BALANCE] > 0 THEN BALANCE ELSE NULL END as Credits " + _
"FROM TABLE1 WHERE BALANCE <> 0"

也可能[]无法识别分隔符。SQL 中的官方分隔符是双引号"。但是,由于名称Balance没有什么特别之处,您应该删除这些:

Dim strQuery As String = "SELECT ACCOUNT_REF, " + _
"CASE WHEN BALANCE < 0 THEN BALANCE ELSE NULL END as Debits, " + _
"CASE WHEN BALANCE > 0 THEN BALANCE ELSE NULL END as Credits " + _
"FROM TABLE1 WHERE BALANCE <> 0"

否则,您应该使用存储过程而不是查询字符串。

于 2012-12-28T15:32:26.683 回答