2016-03-27 27 views
1

Access'ten VB'ye TableAdapter Yapılandırma Sihirbazı'nı kullanarak veri getirmeye çalışıyorum. Veritabanımdaki her şey dize olarak ayarlanmış ve bu şekilde kalmalıyım. Birlikte 3 rakam eklemem ve her sıradaki her rakamın ortalamasını almam gerekiyor. Benim meselem, 3 rakamı eklemekten ziyade diziyi birleştiriyor olması.VB SQL İfadelerine Erişim

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 

Bazı sütunlar boş olacak ve bir IsNull işlevini kullanarak bu yüzden.

Bu konuda herhangi bir şekilde herhangi bir öneri var mı?

+3

Sorun bu: Neyse, değerler ekleyerek yerine onları bitiştirmek amacıyla bir sayısal türe zorlamak IIF() ifadeleri bir CDbl() veya CInt ile() veya bazı dökme işlevini sarmak Numaraları diziler gibi depolamak gibi şeyleri yaptıklarında. Sayı olarak kullanmanız gerektiğinde işleri karmaşıklaştırırsınız. Şimdi bu dizeleri sayılara dönüştürmelisiniz, böylece onlarla matematik yapabilirsiniz, bunları özetlemek veya ortalamalamak ya da onları artırmak zordur, çünkü bunları da dönüştürmelisiniz. Ayrıca, DB performansınızı daha da yavaşlatıyor, dönüşümleri tekrar tekrar yapmakta olduğu için, sütun doğru bir şekilde sıralanmıyor (sayısal sıralamada) ve gelecekte başka sorunlarla karşılaşıyorsunuz. Verileri düzeltmek daha iyidir. –

+0

Oyuncular yapmayı deneyin. –

cevap

3

Neden, neden her şeyi bir dizge olarak saklamanız gerekiyor?

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

Çok garip gereksinimleri olan atama sorma! Cevabınız için teşekkürler!! – Donncha