2016-03-27 7 views
1

TableAdapter Configuration Wizardを使用して、AccessからVBにデータを移動しようとしています。私のデータベースのすべてが文字列として設定されており、私はそれをそのままにしておく必要があります。私は一緒に3フィギュアを追加し、各列の各図の平均を取得する必要があります。私の問題は、3つの数字を追加するのではなく、文字列を一緒に結合することです。VB SQLステートメントへのアクセス

SELECT   
    ID, StudentID, FirstName, Surname, MCQ, Project, 
    Exam, [Password], IIF(ISNULL(MCQ), 'Not Completed', MCQ) AS Expr2, 
    IIF(ISNULL(Project), 'Not Completed', Project) AS Expr3, 
    IIF(ISNULL(Exam), 'Not Completed', Exam) AS Expr4, 
    IIF(ISNULL(MCQ), 1, MCQ) + IIF(ISNULL(Project), 1, Project) + IIF(ISNULL(Exam), 1, Exam) AS Expr5 
FROM    
    tblStudents 

一部の列はnullになり、私IsNull機能を使用して理由です。

これを回避する方法として、誰かからのご意見はありますか?

+3

これが問題です数字を文字列として保存するような愚かなことをしたとき。あなたは数字として使う必要があるときに複雑になります。今ではそれらの文字列を数字に変換する必要がありますので、数式を計算することができます。また、それらを変換する必要があるため、合計または平均や増分が難しくなります。また、あなたのDBのパフォーマンスは遅くなります。何度も何度も何度も何度も何度も何度も何度も何度も何度も何度も何度もやり直しています。データを修正する方が良い。 –

+0

キャストを試してください。 –

答えて

3

なぜ、なぜすべてを文字列として保存する必要がありますか?とにかく、値を追加する代わりに、それらを連結する目的で数値型にそれらを強制的にCDBL()またはCINT()またはいくつかのキャスト機能付きIIF()ステートメントをラップ:

SELECT 
    ID, StudentID, FirstName, Surname, 
    MCQ, Project, Exam, [Password], 
    IIF(ISNULL(MCQ), 'Not Completed', MCQ) AS Expr2, 
    IIF(ISNULL(Project), 'Not Completed', Project) AS Expr3, 
    IIF(ISNULL(Exam), 'Not Completed', Exam) AS Expr4, 
    CINT(IIF(ISNULL(MCQ), 1, MCQ)) + 
    CINT(IIF(ISNULL(Project), 1, Project)) + 
    CINT(IIF(ISNULL(Exam), 1, Exam) AS Expr5)) 
FROM tblStudents 
+0

非常に奇妙な要件の割り当てを尋ねないでください!ご回答有難うございます!! – Donncha

関連する問題