T-SQL QUERY, СЧИТАЙТЕ С ЗАПИСИ ТРЕЙЛЕРА - PullRequest
0 голосов
/ 15 мая 2018

У меня есть код, который начинается с процедуры Alert, а затем идет с заголовками, подробностями и трейлерами, где, как я использовал, выбирают разные для заголовка, детали, а между заголовком и подробностью есть команда объединения, так что мне было интересно, я мог бы получить общее количество записей из заголовка и детализации в строке трейлера в конкретном столбце .. на данный момент я использовал

CONVERT(bigint, count(*) ) as Recordcount,

но он отображается как 498 строк .. но у нас изначально есть 475 строк о трейлере. я думаю, что это подсчет общего количества строк запроса SQL ..

1 Ответ

0 голосов
/ 15 мая 2018

COUNT(*) подсчитывает общее количество строк в наборе данных; включая любые строки, которые полностью состоят из значения NULL. Взять, к примеру:

WITH VTE AS(
    SELECT CONVERT(int,NULL) AS N
    UNION ALL
    SELECT CONVERT(int,NULL) AS N
    UNION ALL
    SELECT CONVERT(int,NULL) AS N
    UNION ALL
    SELECT CONVERT(int,NULL) AS N
    UNION ALL
    SELECT CONVERT(int,NULL) AS N
    UNION ALL
    SELECT 1 AS N)
SELECT COUNT(*)
FROM VTE;

Обратите внимание, это возвращает 6, а не 1. Если вы хотели значение 1, то вам нужно будет использовать COUNT(N).

Без примеров данных это просто догадки, но я думаю, вам нужно использовать COUNT с выражением CASE, чтобы включать только строки, которые не являются верхними или нижними колонтитулами. Это псевдо-SQL, однако это будет что-то вроде:

COUNT(CASE WHEN <<Some expression that determines a row instead a header/footer>> THEN 1 END)

Кроме того, нет смысла использовать CONVERT(BIGINT,COUNT(<<expr>>). Если вы выполняете подсчет, который может вернуть более 2^31-1 строк, используйте COUNT_BIG. Если вы не собираетесь возвращать более 2^31-1 строк, просто используйте COUNT (вы возвращаете <500 строк, поэтому буквально нет причин использовать <code>bigint).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...