Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ODBC SQL查询,从一列创建借记和贷记的两列_Sql_Odbc - Fatal编程技术网

ODBC SQL查询,从一列创建借记和贷记的两列

ODBC SQL查询,从一列创建借记和贷记的两列,sql,odbc,Sql,Odbc,我们正在使用VB.NET和2.0.NET framework连接到一个专有的ODBC源。我们在平衡字段中,正值是借方,负值是贷方以及其他信息 由于不支持大小写,无法执行以下查询: Dim strQuery As String = "SELECT ACCOUNT_REF, " + _ "CASE WHEN [BALANCE] < 0 THEN BALANCE ELSE NULL END, " + _ "CASE WHEN [BALANCE] > 0 THEN BALANCE ELSE

我们正在使用VB.NET和2.0.NET framework连接到一个专有的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"
在使用数据集时,我们可以将平衡列一分为二吗?如果有,有什么例子吗

我们使用以下代码构建数据集,因为此专有实现不支持case:

        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
任何帮助都将不胜感激。谢谢。

您尝试过:

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。

我惊讶地发现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"

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

我很确定case语句中没有尾随大小写:case WHEN[BALANCE]<0则BALANCE ELSE NULL END应该可以工作。您的意思是执行类似于选择ACCOUNT\u REF、BALANCE as debitis、,余额作为信用额…?我们也尝试过-谢谢-我们正在连接到Sage帐户50。没错,David-我不太擅长SQL,因为我主要是在没有SQL数据库的情况下工作。使用ODBC而不使用CASE是否很容易做到这一点?您是否有限制在.NET代码中将借项和贷项分开?即使union在这个专有实现中也不起作用!!非常感谢这个想法,我想我可能会找到一种方法来组合这两个数据集,这样就可以了。感谢Stuart,我们已经决定使用Linq来处理数据集。因为Union也不是由Sage实现的。如果这是一个合适的SQL DB,那么这是有意义的,但这是Sage自己对ODBC的实现,他们已经确认他们只实现了他们需要的,因为ODBC没有得到他们的正式支持。看起来他们还没有实现IF、CASE或UNION!!
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"