0

Дублирует общее кол-во строк, а должно показывать по отдельному значению. К примеру в 1й строке 1го столбца "Высшее" а во втором столбце кол-во записей из второй таблицы, где происходит совпадение

    select sp2.NAIM, 
        (select COUNT(*) 
        from KDK 
        inner join kdk1 on kdk.N_KDK=kdk1.N_KDK
        inner join SP2 on sp2.KOD_N=KDK1.KK02
        where kdk1.KK02=sp2.KOD_N and sp2.SPR='k02' and KDK.KPOL=1) as Male

from SP2  where sp2.SPR='k02'
4
  • Вы, скорее всего, "дубли" строк получили JOIN'ами. Хотя без структуры таблиц сожно точно сказать
    – Donil
    10 фев 2014 в 11:50
  • может кто привести более удобный пример, аналогичный этому msdn.microsoft.com/ru-ru/library/ms175997.aspx (самый последний)
    – toris
    10 фев 2014 в 12:07
  • @Владислав Сергеевич, создайте пример вашей структуры на sqlfiddle.com разобраться в ваших названиях колонок и таблиц не представляется возможным. 10 фев 2014 в 12:49
  • не открывается на работе сайт вот файлик с полями табл rghost.ru/private/52332455/38557ba6ac6cd55c06102d9764233050
    – toris
    10 фев 2014 в 13:30

1 ответ 1

1

По вашей структуре:

  1. необходимости в kdk1 вообще нет, там содержатся те же данные что и в kdk
  2. для подсчета количества вложенный запрос не нужен

Итого:

select sp2.naim, COUNT(*) as Male
from kdk 
  inner join sp2 on sp2.kod_n=kdk.kk02
where 
  sp2.spr = 'k02'
  and kdk.kpol = 1
group by sp2.naim

SQLFiddle

ЗЫ upd. с декартовым произведением поторопился, да

3
  • а как насчёт того, что бы вывелась 3я колонка с условием kdk.kpol = 2
    – toris
    11 фев 2014 в 7:01
  • + в колонке с условием kdk.kpol = 2 10 строк а с kdk.kpol = 1 12 строк. Я так понимаю, нужно копать в направлении сводных таблиц\матриц
    – toris
    11 фев 2014 в 7:31
  • @Владислав Сергеевич, это будет другой запрос, разумеется. вы не сказали какой у вас sql server, в 2012 можно так: sqlfiddle.com/#!6/77658/1 в 2008 аналогично через case... 11 фев 2014 в 10:27

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.