Microsoft.ACE.OLEDB Driver を使用して 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
したがって、これを次の 2 つのクエリに分割しました。
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%')
そして2番目は:
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 ファイルに書き戻し、セカンダリ クエリでファイルを再度読み取るしか方法がありませんが、これには大きなパフォーマンス上の欠点があります。