Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как получить число строк в таком запросе?  [new]
Blackmore
Member

Откуда:
Сообщений: 520
Без подзапроса.
SELECT
fr1.status, sbd_subscriber_id, sbd_bill_ac_no, sbd_dialling_no,  name, fr1.total_charge, '' as DUMMY, fr1.timestamp, fr1.user, 
min(fdr1.prio) as PRIO, description, fr1.case_id 
 FROM fraud_case fr1  
 INNER JOIN fraud_detection_rules fdr1 ON fdr1.rule_id = fr1.rule_id  
 INNER JOIN sbd_sub_dets ON subscriber_id = sbd_subscriber_id  
 INNER JOIN slcustm ON sbd_bill_ac_no = customer 
 WHERE status IN ('N', 'F', 'R')  
 group by 1,2,3,4,5,6,7,8,9  
14 мар 18, 19:28    [21256788]     Ответить | Цитировать Сообщить модератору
 Re: Как получить число строк в таком запросе?  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20198
1) Запрос - нерабочий.

2) если причесать, получится (хрен с ней, с некорректностью запроса)
SELECT fr1.status  -- 1 поле группировки
     , sbd_subscriber_id -- 2 поле группировки
     , sbd_bill_ac_no -- 3 поле группировки
     , sbd_dialling_no -- 4 поле группировки
     , name -- 5 поле группировки
     , fr1.total_charge -- 6 поле группировки
     , '' as DUMMY -- 7 поле группировки
     , fr1.timestamp -- 8 поле группировки
     , fr1.user -- 9 поле группировки
     , min(fdr1.prio) as PRIO
     , description
     , fr1.case_id 
 FROM fraud_case fr1  
 INNER JOIN fraud_detection_rules fdr1 ON fdr1.rule_id = fr1.rule_id  
 INNER JOIN sbd_sub_dets ON subscriber_id = sbd_subscriber_id  
 INNER JOIN slcustm ON sbd_bill_ac_no = customer 
 WHERE status IN ('N', 'F', 'R')  

 group by 1,2,3,4,5,6,7,8,9  


Соответственно посчитать количество записей можно запросом

SELECT COUNT(1) AS recordscount
FROM fraud_case fr1  
INNER JOIN fraud_detection_rules fdr1 ON fdr1.rule_id = fr1.rule_id  
INNER JOIN sbd_sub_dets ON subscriber_id = sbd_subscriber_id  
INNER JOIN slcustm ON sbd_bill_ac_no = customer 
WHERE status IN ('N', 'F', 'R')
GROUP BY fr1.status
       , sbd_subscriber_id
       , sbd_bill_ac_no 
       , sbd_dialling_no 
       , name 
       , fr1.total_charge 
       , fr1.timestamp
       , fr1.user

Поля за рамками группировки на результат не влияют. Литеральное поле - тоже.
14 мар 18, 20:15    [21256863]     Ответить | Цитировать Сообщить модератору
 Re: Как получить число строк в таком запросе?  [new]
msLex
Member

Откуда:
Сообщений: 7730
Akina
Соответственно посчитать количество записей можно запросом

SELECT COUNT(1) AS recordscount
FROM fraud_case fr1  
INNER JOIN fraud_detection_rules fdr1 ON fdr1.rule_id = fr1.rule_id  
INNER JOIN sbd_sub_dets ON subscriber_id = sbd_subscriber_id  
INNER JOIN slcustm ON sbd_bill_ac_no = customer 
WHERE status IN ('N', 'F', 'R')
GROUP BY fr1.status
       , sbd_subscriber_id
       , sbd_bill_ac_no 
       , sbd_dialling_no 
       , name 
       , fr1.total_charge 
       , fr1.timestamp
       , fr1.user



Вы же в курсе, что этот запрос может вернуть более одной записи?
14 мар 18, 20:22    [21256871]     Ответить | Цитировать Сообщить модератору
 Re: Как получить число строк в таком запросе?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3145
Blackmore,

Добавить в список возвращаемых полей
count(*) over() as [TotalRows]
Группировку трогать не нужно.
15 мар 18, 04:31    [21257406]     Ответить | Цитировать Сообщить модератору
 Re: Как получить число строк в таком запросе?  [new]
Blackmore
Member

Откуда:
Сообщений: 520
Ennor Tiegael,

Спасибо, то что нужно!
15 мар 18, 21:55    [21259999]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить