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 列を 2 つに分割できますか? もしそうなら、例はありますか?

次のコードを使用して DataSet を構築しています (この独自の実装ではケースがサポートされていないため)。

        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

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 に答える
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 に答える