2011-03-11 77 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