【发布时间】:2012-09-10 18:27:25
【问题描述】:
我正在使用 Microsoft.ACE.OLEDB 驱动程序来查询 excel 文件。然后将结果传递给 DataTable。但是,此驱动程序不支持我想使用的 T-SQL 查询。
with abc as
(
SELECT Credit, Debit,[Reference 2] As [Job Code]
from xlSheet
WHERE ([Reference 2] LIKE '%JOB%') OR ([Reference 2] LIKE '%CRN%')
union all
SELECT Credit, Debit,[Reference] As [Job Code]
from xlSheet
WHERE ([Reference] LIKE '%JOB%') OR ([Reference] LIKE '%CRN%')
)
SELECT sum(Credit) as Credit, sum(debit) as Debit,ABS(ROUND(SUM(Debit - Credit),2)) as Total , [Job Code],
case when ROUND(SUM(Debit - Credit),2) < 0
then 'JOB'
else 'JOBR'
end as 'Trans Code'
from abc
group by [Job Code]
HAVING ROUND(SUM(debit - credit),2) <> 0
所以,我把它分成了两个查询,即:
SELECT Credit, Debit,[Reference 2] As [Job Code]
from xlSheet
WHERE ([Reference 2] LIKE '%JOB%') OR ([Reference 2] LIKE '%CRN%')
union all
SELECT Credit, Debit,[Reference] As [Job Code]
from xlSheet
WHERE ([Reference] LIKE '%JOB%') OR ([Reference] LIKE '%CRN%')
第二个是:
SELECT sum(Credit) as Credit, sum(debit) as Debit,ABS(ROUND(SUM(Debit - Credit),2)) as Total , [Job Code],
case when ROUND(SUM(Debit - Credit),2) < 0
then 'JOB'
else 'JOBR'
end as 'Trans Code'
from abc
group by [Job Code]
HAVING ROUND(SUM(debit - credit),2) <> 0
现在我知道可以对 DataTable 执行基本的选择查询,但没有比这更复杂的了。我听说过 LINQ,我相信这可以通过这个来完成。 但是由于不熟悉 LINQ,我在这方面需要一些帮助。 如果做不到这一点,我看到的唯一其他方法是将结果写回辅助 excel 文件,并使用辅助查询重新读取该文件——但这会带来巨大的性能缺陷。
【问题讨论】:
-
第一个查询是不受支持的吗?如果是这样,两部分查询的第二部分在哪里?如果不是,那是否返回可接受的
DataTable?DataTable看起来像什么?你想做什么? -
第二部分,不支持的是:SELECT sum(Credit) as Credit, sum(debit) as Debit,ABS(ROUND(SUM(Debit - Credit),2)) as Total , [ Job Code],当 ROUND(SUM(Debit - Credit),2) 0
-
你能把它添加到你的问题中吗?在 cmets 中无法读取。
-
与论坛网站不同,我们不使用“谢谢”、“任何帮助表示赞赏”或Stack Overflow 上的签名。请参阅“Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?.