2012-12-28 61 views
0

我們正在使用VB .NET和使用2.0 .NET框架連接到專有ODBC源。我們正在拉平衡字段(正值爲借方,負值爲信用)以及其他信息。ODBC SQL查詢創建兩列用於借方和貸方

下面的查詢是不可能的,因爲不支持的情況:

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中工作時?如果有,有沒有例子?

我們用下面的代碼來構建我們的數據(因爲情況不是這個專有實現支持):

 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 

任何幫助,將真正的讚賞。謝謝。

+0

我很確定在case語句中沒有尾隨的情況:'CASE WHEN [BALANCE] <0 THEN BALANCE ELSE NULL END' should be working。 – scragar

+1

你的意思是做一些類似於「SELECT ACCOUNT_REF,平衡作爲DEBITS,平衡作爲成績......」的東西嗎? –

+0

我們也嘗試過 - 謝謝 - 我們正在連接到Sage Accounts 50. – pipalia

回答

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可以支持,而情況並不。

+0

即使工會不在這個專有實施工作!非常感謝這個想法,我想我可能會找到一種方法來組合這兩個DataSet,並且這會實現。 – pipalia

+0

謝謝Stuart,我們決定使用Linq來處理DataSet。由於聯盟也不是由Sage實施的。 – pipalia

1

我很驚訝地發現ODBC在VB.NET下不支持這種情況。我對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中的官方分隔符是雙引號"。 Howerver,正如其名字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" 

否則,你應該使用,而不是查詢字符串的存儲過程。

+0

如果這是一個合適的SQL DB,它是有道理的,但這是Sage自己的ODBC實現,他們已經證實他們只實現了他們需要的東西,因爲ODBC沒有官方支持它們。看起來他們沒有實施IF,CASE或UNION! – pipalia