2011-03-11 79 views
0

嗨,大家好,我在SQL中有一些子查詢的問題。我正在使用MS Access 2010並編寫sql。如何使子查詢正確

SELECT vak.Name, COUNT(vak.amount) AS [First], COUNT(vak2.amount2) AS [Second]  
FROM 
(SELECT kon.Name, (Count(icv.CV_ID)/Count(icv.CV_ID)) AS amount 
FROM (kon INNER JOIN v ON kon.K_ID = v.K_ID) INNER JOIN icv ON v.Vak_ID = icv.Vak_ID 
GROUP BY v.Vak_ID, kon.Name) AS vak, 
(SELECT kon.Name, COUNT(v.Vak_ID) AS amount2 
FROM (kon INNER JOIN v ON kon.K_ID = v.K_ID) INNER JOIN icv ON v.Vak_ID = icv.Vak_ID 
GROUP BY kon.Name) AS vak2 
GROUP BY vak.Konkursa_Nosaukums 

當我在數據表視圖中檢查它們兩列是相同的。 「First」中有6行,值分別爲12,12,6,12,6,6。「Second」列中的值相同。當我將這段代碼分成兩部分並創建兩個新的查詢用於測試時,「First」列顯示值2,2,1,2,1,1,第二個查詢的值爲3,3,1,2,1, 1。這兩個列在分開時都有正確的值,但是當我將這些值合併時,一些未知的值就會顯示爲12(我不知道它將像12這樣的數字放在哪裏)。當我在最後一行之前放行
WHERE vak.amount = vak2.amount2時,它在兩列中顯示2,2,1,2,1,1。我想這隻會從第一個子查詢或東西。

如何使這些子查詢正確,因此它們顯示的值與它們分別寫入時相同?

+0

你能後,你已經採取了.... – 2011-03-11 22:42:28

+0

樣本數據和各個子查詢具有apropriate組@ Nitin Midha在這裏都是單獨查詢。 第一個: SELECT vak.Name,COUNT(vak.skaits)as [Column Name] FROM (SELECT kon.Name,(Count(icv.CV_ID)/ Count(icv.CV_ID))AS amount FROM( KON INNER JOIN v ON kon.Kon_ID = v.Kon_ID)INNER JOIN ICV ON v.Vak_ID = icv.Vak_ID GROUP BY v.Vak_ID,kon.Name)AS VAK GROUP BY vak.Name 二之一: SELECT kon.Name,COUNT(v.Vak_ID)AS amount2 FROM Kon INNER JOIN v ON kon.Kon_ID = v.Kon_ID GROUP BY Kon.Name 首先顯示COUNT列中的2,2,1,2,1,1 , 第二個顯示COUNT列中的3,3,1,2,1,1 – Rob 2011-03-11 23:32:23

+0

我想你缺少一個連接條件,並在適當的組... ...檢查我的答案,如果它是有意義的... – 2011-03-12 00:10:44

回答

0
SELECT vak.Name, vak.amount AS [First], vak2.amount2 AS [Second] 
FROM 
(SELECT kon.Name, (Count(icv.CV_ID)/Count(icv.CV_ID)) AS amount 
FROM (kon INNER JOIN v ON kon.K_ID = v.K_ID) INNER JOIN icv ON v.Vak_ID = icv.Vak_ID 
GROUP BY v.Vak_ID, kon.Name) AS vak, 
(SELECT kon.Name, COUNT(v.Vak_ID) AS amount2 
FROM (kon INNER JOIN v ON kon.K_ID = v.K_ID) INNER JOIN icv ON v.Vak_ID = icv.Vak_ID 
GROUP BY kon.Name) AS vak2 
WHERE vak.Name = van2.Name 
+0

它顯示錯誤,當我喜歡你,刪除COUNT函數,並在最後添加WHERE。 您綁定執行不包含指定表達式'First'的查詢作爲聚合函數的一部分。 – Rob 2011-03-11 23:43:37

0

我認爲你缺少一個連接條件,並通過...

SELECT vak.Name, vak.amount AS [First], vak2.amount2 AS [Second] 
FROM 
(SELECT kon.Name, (Count(icv.CV_ID)/Count(icv.CV_ID)) AS amount 
FROM (kon INNER JOIN v ON kon.K_ID = v.K_ID) INNER JOIN icv ON v.Vak_ID = icv.Vak_ID 
GROUP BY v.Vak_ID, kon.Name) AS vak, 
(SELECT kon.Name, COUNT(v.Vak_ID) AS amount2 
FROM (kon INNER JOIN v ON kon.K_ID = v.K_ID) INNER JOIN icv ON v.Vak_ID = icv.Vak_ID 
GROUP BY kon.Name) AS vak2 
WHERE vak.Name = van2.Name