Как правильно сделать подзапросы - PullRequest
0 голосов
/ 12 марта 2011

Эй, ребята, у меня есть некоторые проблемы с подзапросами в 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

Когда я проверяю это в представлении таблицы данных, оба столбца идентичны.В «Первом» 6 строк, есть значения 12, 12, 6, 12, 6, 6. Те же значения в «Втором» столбце.Когда я разбил этот код на 2 части и сделал 2 новых запроса для тестирования, столбец «Первый» показывает значения 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 в обоих столбцах.Я думаю, это берет только из первого подзапроса или что-то.

Как правильно сделать эти подзапросы, чтобы они отображали значения так же, как когда они написаны отдельно?

Ответы [ 2 ]

0 голосов
/ 12 марта 2011

Я думаю, что вы пропустили условие соединения и имеете в соответствующей группе ...

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 голосов
/ 12 марта 2011
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
...