Подсчет записей в таблице SQL - PullRequest
0 голосов
/ 30 апреля 2018

В настоящее время у меня есть таблица в системе, которую я не могу изменить. Так что не идеальный формат, я знаю, но мне нужно посчитать 6 столбцов, чтобы показать, есть ли что-то введенное, а затем поместить сумму в последний столбец. Записи являются текстовыми, поэтому мне просто нужно знать сумму по 6 столбцам.

[data1]
[data2]
[data3]
[data4]
[data5]
[data6]
--To be created [totalcount] 

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Первое, что нужно рассмотреть, если пустая строка ('') считается пустой или нет. Затем вы можете сделать следующее для всей таблицы:

SELECT
    COUNT(CASE WHEN T.Col1 IS NULL OR T.Col1 = '' THEN 1 END) Col1Blanks,
    COUNT(CASE WHEN T.Col2 IS NULL OR T.Col2 = '' THEN 1 END) Col2Blanks,
    COUNT(CASE WHEN T.Col3 IS NULL OR T.Col3 = '' THEN 1 END) Col3Blanks,
    COUNT(CASE WHEN T.Col4 IS NULL OR T.Col4 = '' THEN 1 END) Col4Blanks,
    COUNT(CASE WHEN T.Col5 IS NULL OR T.Col5 = '' THEN 1 END) Col5Blanks,
    COUNT(CASE WHEN T.Col6 IS NULL OR T.Col6 = '' THEN 1 END) Col6Blanks
FROM
    YourTable T

Если вам нужно общее их количество (ISNULL - это функция SQL Server, у каждого DMBS есть один эквивалент):

SELECT
    X.Col1Blanks,
    X.Col2Blanks,
    X.Col3Blanks,
    X.Col4Blanks,
    X.Col5Blanks,
    X.Col6Blanks,
    ISNULL(X.Col1Blanks, 0) +
        ISNULL(X.Col2Blanks, 0) +
        ISNULL(X.Col3Blanks, 0) +
        ISNULL(X.Col4Blanks, 0) +
        ISNULL(X.Col5Blanks, 0) +
        ISNULL(X.Col6Blanks, 0) TotalBlanks
FROM
    (
    SELECT
        COUNT(CASE WHEN T.Col1 IS NULL OR T.Col1 = '' THEN 1 END) AS Col1Blanks,
        COUNT(CASE WHEN T.Col2 IS NULL OR T.Col2 = '' THEN 1 END) AS Col2Blanks,
        COUNT(CASE WHEN T.Col3 IS NULL OR T.Col3 = '' THEN 1 END) AS Col3Blanks,
        COUNT(CASE WHEN T.Col4 IS NULL OR T.Col4 = '' THEN 1 END) AS Col4Blanks,
        COUNT(CASE WHEN T.Col5 IS NULL OR T.Col5 = '' THEN 1 END) AS Col5Blanks,
        COUNT(CASE WHEN T.Col6 IS NULL OR T.Col6 = '' THEN 1 END) AS Col6Blanks
    FROM
        YourTable T
    ) X
0 голосов
/ 30 апреля 2018

Если я правильно понимаю:

select t.*,
       ( (case when col1 is not null then 1 else 0 end) +
         (case when col2 is not null then 1 else 0 end) +
         (case when col3 is not null then 1 else 0 end) +
         (case when col4 is not null then 1 else 0 end) +
         (case when col5 is not null then 1 else 0 end) +
         (case when col6 is not null then 1 else 0 end)
       ) as num_notnull
from t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...