Girişinizdə Tək Sorğu Sahəsində Çox Nəticələri Necə Göstərmək olar

İndi paylaş:

Əgər verilənlər bazanızdakı digər məlumatlarla yanaşı, sahə/sorğu dəyərlərinin ayrılmış siyahısını yaratmaq məcburiyyətində qalmısınızsa, bunun ən yaxşı halda çətin ola biləcəyini və əksər insanların mümkün olmayacağını düşündüyü bir tapşırıq olduğunu biləcəksiniz. Məsələn, sizdən ilin hər ayı üçün ən yaxşı 5 satış işçisinin kim olduğunu - Azalan sıra ilə - və ya hər müştəriyə ən yaxın 3 mağazanı necə göstərdiyinizi göstərən bir hesabat hazırlamağınız istənilibsə, potensial olaraq çarpaz sorğularla mübahisə etməli və ya nəticələri Access xaricində əl ilə birləşdirməli olacaqsınız. Lakin kiçik bir VBA kodunun köməyi ilə bir neçə dəqiqə ərzində aşağıdakı kimi nəticələr əldə edəcəksiniz...

Jan Con, Sally, Bill
fevral Sally, Adam, John
Mar Adam, Sally, Bill

Hər bir satış nümayəndəsi üçün ilk 3 ən böyük müştərinin siyahısı, ən çox xərcləyən müştərilərinizin hər birinə ən yaxın 5 mağaza kimi daha böyük sorğunun bir hissəsi kimi nəticələrin ayrılmış siyahısını göstərməyin faydalı olacağı çox vaxt olur. , siyahı davam edir.

Hesabatınızı birləşdirməyi dayandırın

Xanım AccessBu cür hesabat yaratmaq üçün təfərrüat əldə etmək mümkün qədər çox olsa da, siz adətən elektron cədvəlin və ya hesabatın bir hissəsi kimi Access-dən kənarda nəticələri əl ilə birləşdirmək məcburiyyətində qalacaqsınız.

Aşağıdakı kod Access-dən kənar sorğu nəticələri ilə məşğul olmaq ehtiyacını aradan qaldırır və bunun əvəzinə yuxarıda göstərilən nəticələri asanlıqla əldə etməyə imkan verəcəkdir.

Əvvəlcə kodun nə edə bilməsini istədiyimizi qeyd edək:

"Sorğu verildikdə, y ilə ayrılmış tək sətirdə birləşdirilmiş x ədədi nəticəni qaytarın"

Başlamazdan əvvəl

Koda baxmazdan əvvəl qeyd etmək lazımdır ki, daha ümumi olan və istənilən sorğu kombinasiyasını idarə edə bilən VBA funksiyası yaratmaq mümkün olsa da, bunu etmək kifayət qədər uzun kodla nəticələnəcək, buna görə də bu məqalədə nə edəcəyik. nümunə işi müəyyən etmək və həmin işi idarə etmək üçün funksiyanı yazmaqdır. Bunu bu şəkildə etmək, xüsusi ehtiyaclarınıza cavab vermək üçün kodu yenidən yaratmağınızı çox asanlaşdıracaq.

Nümunə halı

Müştəri alışlarının təfərrüatlarını və alışın aid olduğu məhsul kateqoriyasını saxlayan satış bazamız var. Aylar üzrə ilk 3 kateqoriyanı azalan qaydada göstərən bir hesabat hazırlamaq istəyirik.

Sadəlik üçün biz nümunəni vahid cədvəldə saxlayacağıq, baxmayaraq ki, əsas sizin quraşdırmanızdan asılı olmayaraq işləyəcək. İstifadə edəcəyimiz cədvəl aşağıdakı kimi qurulur:

Satış
Müştəri adı
Əməliyyat Tarixi
TransactionValue
Kateqoriya

Aydındır ki, bu həddən artıq sadələşdirilmiş quraşdırmadır, lakin siz fikir əldə edirsiniz.

İndi - kod

Public Function CategoryList(Month As String, NumResults As Integer, SortAscending As Boolean, Delimiter As String) As String
    Dim sSql, resultString As String
    Dim rst As Recordset
    Dim firstLine As Boolean
    
    'Create our SQL string using the supplied parameters
    sSql = "SELECT TOP " & NumResults & " [category] FROM sales GROUP BY Format([TransactionDate],""mmm""), sales.Category HAVING (((Format([TransactionDate], ""mmm"")) = """ & Month & """))"
    If SortAscending Then sSql = sSql & " ORDER BY Sum(sales.TransactionValue) DESC;"
    
    Set rst = CurrentDb.OpenRecordset(sSql)
    
    firstLine = True
    
    'Loop through the results, and create the string to return
    With rst
        Do While Not .EOF
            If Not firstLine Then
                resultString = resultString & Delimiter & .Fields("category")
            Else
                resultString = resultString & .Fields("category")
                firstLine = False
            End If
            
        .MoveNext
        Loop
    End With
    
    Set rs = Nothing
    CategoryList = resultString
End Function

Kod - izah edildi

VBA koduGördüyünüz kimi, kod olduqca öz-özünə izahlıdır. Sorğumuzu yaratmaq üçün verilən parametrlərdən istifadə etməklə başlayırıq. Sorğu sətri yaradıldıqdan sonra onu icra edirik və nəticələri bir-birinə birləşdirərək axtardığımız tək nəticə sətrini yaradırıq.

Siz qeyd edəcəksiniz ki, biz sətirə ayırıcı əlavə edib-etməməyimizi yoxlayırıq – bu yoxlama olmadan ya pis formatlaşdırılmış nəticə sətri ilə nəticələnəcəksiniz, ya da arzuolunmaz ayırıcıları silmək üçün kod əlavə etməli olacaqsınız – bu yolla hər şeyi əvvəldən gözəl və səliqəli saxlayır.

Funksiyanın özü, şübhəsiz ki, sorğu, hesabat və ya Access daxilində istədiyiniz yerdə çağırıla bilər.

Zədələnmiş Giriş verilənlər bazasını düzəldin

Əgər qarşılaşsanız zədələnmiş Access verilənlər bazası yuxarıdakı kodu işə saldığınız zaman, onları təmir etmək və bütün cədvəlləri zədələnmiş verilənlər bazalarından bərpa etmək üçün bəzi xüsusi vasitələrdən istifadə etmək daha yaxşıdır.

Müəllif Giriş:

Mitchell Pond məlumatların bərpası üzrə mütəxəssisdir DataNumendaxil olmaqla məlumatların bərpası texnologiyaları üzrə dünya lideri olan , Inc SQL problemini təmir edin və excel bərpa proqram məhsulları. Ətraflı məlumat üçün ziyarət edin www.datanumen.com

İndi paylaş:

Şərhlər bağlıdır.