2016-08-25 7 views
0

Я пытаюсь выбрать количество строк, возвращаемых в запросе. ЗапросОшибка SQL Server, подсчитывающая подсчет в подзапросе

Select 
    a.itm_cd, max(b.doc_num) ,max(c.text) 
from 
    ist b, itm_trn a, ist_cmnt c 
where 
    a.ist_seq_num = b.ist_seq_num 
    and a.ist_seq_num = c.ist_seq_num 
    and a.ist_wr_dt = b.ist_wr_dt 
    and a.new_loc_cd like 'BOX115' 
    and a.ITT_CD = 'XFR' and a.create_dt >'21-AUG-16' 
group by 
    a.itm_cd; 

Для этого конкретного запроса я вернусь 3 строки, мне нужно написать запрос, который возвращает количество строк, возвращаются.

Я попытался это:

Select 
    count(*) 
from 
    (Select 
     a.itm_cd, max(b.doc_num), max(c.text) 
    from 
     ist b,itm_trn a, ist_cmnt c 
    where 
     a.ist_seq_num = b.ist_seq_num 
     and a.ist_seq_num = c.ist_seq_num 
     and a.ist_wr_dt = b.ist_wr_dt 
     and a.new_loc_cd like 'BOX115' 
     and a.ITT_CD = 'XFR' 
     and a.create_dt > '21-AUG-16' 
    group by 
     a.itm_cd); 

Это приводит к синтаксической ошибке

Msg 102, уровень 15, состояние 1 линия 1
Неправильный синтаксис около ')'.

Я не уверен, что я делаю неправильно, у меня есть аналогичный оператор SQL, который работает именно так в Oracle, но не нашел, где я запутался в SQL Server.

UPDATE:

в соответствии с первым предложением я получил я попробовал:

Select 
    count(*) 
from 
    (Select 
     a.itm_cd, max(b.doc_num), max(c.text) 
    from 
     ist b, itm_trn a, ist_cmnt c 
    where 
     a.ist_seq_num = b.ist_seq_num 
     and a.ist_seq_num = c.ist_seq_num 
     and a.ist_wr_dt = b.ist_wr_dt 
     and a.new_loc_cd like 'BOX115' 
     and a.ITT_CD = 'XFR' 
     and a.create_dt > '21-AUG-16' 
    group by 
     a.itm_cd) as T 

Ошибки вернулись были

Msg 8155, уровень 16, состояние 2, строка 12
Для столбца 2 'T' не указан столбец.

Msg 8155, Level 16, State 2, Line 12
Для столбца 3 'T' не указан столбец.

+1

вам нужно добавить псевдоним для вашей производной таблицы: 'группы по a.itm_cd) при Т,' – Lamak

+0

Пробовал эту ошибку я получаю нет столбца был указан на колонку 2 «T» и никакой колонки не была указанному для столбца 3 «T» – Danimal

+1

Вам даже не нужны эти столбцы для подсчета подсчета: 'select count (*) from (выберите a.itm_cd. .......... группу по a.itm_cd) как T; ' – Lamak

ответ

0

AS за сообщение об ошибке, вы должны добавить псевдоним для своих агрегированных столбцов. Попробуйте вот так,

SELECT count(*) 
FROM (
    SELECT a.itm_cd 
     ,max(b.doc_num) AS MaxDoc_num 
     ,max(c.TEXT) AS MaxText 
    FROM ist b 
     ,itm_trn a 
     ,ist_cmnt c 
    WHERE a.ist_seq_num = b.ist_seq_num 
     AND a.ist_seq_num = c.ist_seq_num 
     AND a.ist_wr_dt = b.ist_wr_dt 
     AND a.new_loc_cd LIKE 'BOX115' 
     AND a.ITT_CD = 'XFR' 
     AND a.create_dt > '21-AUG-16' 
    GROUP BY a.itm_cd 
    ) T 

Вы можете легко найти счет, используя этот запрос.

SELECT count(DISTINCT a.itm_cd) 
FROM ist b 
    ,itm_trn a 
    ,ist_cmnt c 
WHERE a.ist_seq_num = b.ist_seq_num 
    AND a.ist_seq_num = c.ist_seq_num 
    AND a.ist_wr_dt = b.ist_wr_dt 
    AND a.new_loc_cd LIKE 'BOX115' 
    AND a.ITT_CD = 'XFR' 
    AND a.create_dt > '21-AUG-16' 
Смежные вопросы