【问题标题】:Count entries across a SQL table计算 SQL 表中的条目
【发布时间】:2018-04-30 10:39:44
【问题描述】:

我目前有一张在我无法更改的系统中的表。所以不是理想的格式,我知道,但我需要计算 6 列以显示是否输入了某些内容,然后将总和放入最后一列。条目是文本,所以我只需要知道 6 列的总数。

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

【问题讨论】:

  • 样本数据和期望的结果会有所帮助。以及如何“计算”文本?

标签: sql count multiple-columns


【解决方案1】:

如果我理解正确:

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;

【讨论】:

  • HI - 这似乎只是计算列。所以我总共得到了 6 。尽管在我检查过的条目上,这些列是空白的。
  • 但是我刚刚尝试过 >'0' 而不是 not null 并且有效。总是有办法嘿。感谢您的帮助戈登
  • 0 也是一个值,你想要if there is something entered 所以Gordon 只检查了NULL,根据你的问题这是正确的。
  • @HAS 。 . .您的问题有点模棱两可(我认为NULL 是对 SQL 上下文中“空白”的非常合理的解释)。但是字符串的更好比较是> ''
【解决方案2】:

首先要考虑的是一个空字符串 ('') 是否被认为是空的。然后您可以对整个表执行以下操作:

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

【讨论】:

    猜你喜欢
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2020-09-30
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多