如何计算具有多个值的表的列的元素

时间:2018-03-30 16:54:37

标签: sql count

我的问题是:我有一个包含列Compose的表emailID。在此列中,我有abc@abc.comdef@abc.com, ghi@abc.com等数据。

现在每当我使用select count(*) from compose计算该列的元素数量时,它会显示答案:2个元素,但它应该返回3个元素的答案。它应该将def@abc.comghi@abbc.com计为单行中的两个元素。我的问题是如何在两个条目计数之间用逗号创建一个行条目。是否有任何SQL命令?

谢谢

2 个答案:

答案 0 :(得分:0)

您不应该在一列中存储多个值。这不是存储数据的SQL方式。相反,您需要另一个表,每封电子邮件一行。

也就是说,如果您无法更改数据模型,那么这种方法可以解决您提出的具体问题:

select sum(case when emails not like '%,%' then 1
                when emails not like '%,%,%' then 2
           end) as full_cnt

答案 1 :(得分:0)

正如之前评论中所述 - 不要!在单一难以理解的字段中存储您需要处理的数据。当存储真正的单个电子邮件时,您也可以在保存之前对其进行验证。

  1. 制作绑定到主表的子表“电子邮件”(通常使用外键)
  2. 当用户将数据输入文本框时 - 您的应用程序应该执行拆分并将存储在“电子邮件”表中的单个电子邮件存储

    string[] emls = textBox.Text.Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries);
    
  3. 在呈现供用户编辑的数据时,您可以将“电子邮件”中的数据合成到单个文本框中。