Kueri Tab Silang di Access dan/atau SQL untuk mencapai kombinasi tabel

Saya memiliki survei (analisis keputusan multi-kriteria) yang membuang hasilnya ke dalam tabel berikut bernama CriteriaWeighting:

User | Criteria1 | Criteria2 | ... | CriterX
--------------------------------------------
Name1|   n1w1    |    n1w2   | ... |   n1wX |
Name2|   n2w1    |    n2w2   | ... |   n2wX |
...

Saya ingin membuat tabel baru bernama WeightinStats dengan struktur berikut:

Criteria  |  Average  |  StDev  |  Var  |
-----------------------------------------
Criteria1 |  AVG(c1)  | StD(c1) | Var(c1)
Criteria2 |  AVG(c2)  | StD(c2) | Var(c2)
Criteria3 |  AVG(c3)  | StD(c3) | Var(c3)
...       |  ...      | ...     | ...
CriteriaX |  AVG(cX)  | StD(cX) | Var(cX)

di mana AVG(c1), StD(c1), Var(c1), dll. adalah rata-rata, std dev, dan varians dari semua berbagai kriteria yang memberi bobot pada respons dari atas (n1w1, n1we, n1wX, dll.)

Saya telah mencoba menerapkan kueri tab silang, tetapi hasilnya tidak pernah benar, jadi saya bertanya-tanya apakah ada cara untuk secara paksa membuat tabel yang diinginkan melalui SQL. Saya menggunakan MSAccess 2010.

Terima kasih atas bantuannya.


person Extinct23    schedule 10.04.2015    source sumber


Jawaban (1)


Sayangnya, crosstab berjalan sebaliknya. Jika Anda memulai dengan struktur yang Anda inginkan (WeightsinStats) dan membutuhkan struktur asli Anda (CriteriaWeighting), kueri tab silang dapat mencapainya. Tentu saja dengan agregasi pada ujung yang diubah.

Alasannya adalah, kueri tab silang mengubah kumpulan data sedemikian rupa sehingga item nilai dari satu kolom menjadi kolom individual terpisah dengan angka numerik terkait yang digabungkan: Sum(), Rata-rata( ), Menghitung()...

Namun, jika mundur, Anda mungkin perlu melakukan kueri UNION. Perhatikan: ada batasan Access SQL untuk jumlah gabungan tergantung pada kompleksitasnya.

SELECT 'Criteria1'  As Criteria, Avg([Criteria1]), StDev([Criteria1]), Var([Criteria1])
FROM CriteriaWeighting
UNION 
SELECT 'Criteria2' As Criteria, Avg([Criteria2]), StDev([Criteria2]), Var([Criteria2])
FROM CriteriaWeighting
...

Jika Anda memiliki beberapa kriteria, Anda dapat membuat kueri gabungan secara dinamis dengan VBA:

Dim db As Database
Dim strSQL As String
Dim qdef As QueryDef
Dim i As Integer, AllCriteriaCount As Integer

AllCriteriaCount = ??  'ENTIRE FULL COUNT OF CRITERIA HERE

Set db = Currentdb

' BUILD SQL STRING
For i = 1 To AllCriteriaCount

  If i = 1 Then
    strSQL = "SELECT 'Criteria1'  As Criteria, Avg([Criteria1]), StDev([Criteria1]), Var([Criteria1])" & _
             " FROM CriteriaWeighting"
  Else
    strSQL = strSQL & "UNION" & _
             " SELECT 'Criteria" & i & "' As Criteria, Avg([Criteria" & i & "]), StDev([Criteria" & i & "]), Var([Criteria" & i & "])" & _
             " FROM CriteriaWeighting"
  End If
Next i

' CREATE QUERY DEF (STORED QUERY)
Set qdef = db.CreateQueryDef("WeightinStatsquery", strSQL)

' MAKE-TABLE TO OUTPUT FINAL
db.Execute "SELECT * WeightinStatsquery INTO WeightinStats"

Set qdef = Nothing
Set db = Nothing
person Parfait    schedule 10.04.2015
comment
Besar. Terima kasih atas bantuan Anda. Saya mungkin harus mengerjakan ulang beberapa elemen db. - person Extinct23; 15.04.2015