แบบสอบถามแบบตารางใน Access และ/หรือ SQL เพื่อให้สามารถรวมตารางได้สำเร็จ

ฉันมีแบบสำรวจ (การวิเคราะห์การตัดสินใจแบบหลายเกณฑ์) ซึ่งทิ้งผลลัพธ์ลงในตารางต่อไปนี้ชื่อ CriteriaWeighting:

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

ฉันต้องการสร้างตารางใหม่ชื่อ WeightinStats โดยมีโครงสร้างดังต่อไปนี้:

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)

โดยที่ AVG(c1), StD(c1), Var(c1) ฯลฯ คือค่าเฉลี่ย, std dev และความแปรปรวนของเกณฑ์ต่างๆ ทั้งหมดในการถ่วงน้ำหนักการตอบสนองจากด้านบน (n1w1, n1we, n1wX ฯลฯ)

ฉันได้ลองใช้แบบสอบถามแบบตารางแล้ว แต่ไม่เคยได้ผลดีเลย ดังนั้นฉันจึงสงสัยว่ามีวิธีบังคับให้สร้างตารางที่ต้องการผ่าน SQL หรือไม่ ฉันใช้ MSAccess 2010

ขอบคุณสำหรับความช่วยเหลือใด ๆ


person Extinct23    schedule 10.04.2015    source แหล่งที่มา


คำตอบ (1)


น่าเสียดายที่ครอสแท็บเป็นอย่างอื่น หากคุณเริ่มต้นด้วยโครงสร้างที่ต้องการ (WeightsinStats) และต้องการโครงสร้างเดิม (CriteriaWeighting) ข้อความค้นหาแบบตารางก็สามารถบรรลุผลดังกล่าวได้ แน่นอนว่ามีการรวมตัวกันที่จุดสิ้นสุดที่เปลี่ยนแปลงไป

เหตุผลที่ การสืบค้นแบบแท็บไขว้ แปลงชุดบันทึกในลักษณะที่ให้ค่ารายการจากคอลัมน์หนึ่งกลายเป็นแต่ละคอลัมน์ที่แยกจากกัน โดยมีการรวมตัวเลขที่เกี่ยวข้อง: Sum(), Avg( ), นับ()...

อย่างไรก็ตาม การย้อนกลับคุณอาจต้องใช้แบบสอบถามแบบ UNION หมายเหตุ: มีการจำกัดจำนวนสหภาพของ Access SQL ขึ้นอยู่กับความซับซ้อน

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
...

หากคุณมีเกณฑ์หลายเกณฑ์ คุณสามารถสร้างคิวรีแบบร่วมแบบไดนามิกด้วย 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
ยอดเยี่ยม. ขอบคุณสำหรับความช่วยเหลือของคุณ. ฉันอาจต้องทำองค์ประกอบบางอย่างของ db ใหม่ - person Extinct23; 15.04.2015