首页 > 解决方案 > 计算一个单元格中的值

问题描述

我还是 SQL 新手,我正试图弄清楚如何计算一个单元格中的值。不要介意我试图计算数据的 Excel 公式,这样我就不必通过 SQL。

1

这就是我想出的,但它计算的是整列而不是单元格。

SELECT COUNT(Binlocation1) FROM BinLoc

标签: sqlcount

解决方案


这是 Microsoft SQL Server 方言的解决方案:

SELECT
  -- Include any existing columns in the table.
  *,
  -- Calculate a new column: 'BinLocationQuantity'.
  (DATALENGTH(BinLocation1) - DATALENGTH(REPLACE(BinLocation1, ', ', ''))) / DATALENGTH(', ') + 1
    AS BinLocationQuantity
FROM BinLoc

这个想法是

  1. 确定', '分隔符对字段中文本长度的贡献程度BinLocation1。我们通过获取(a)字段长度和(b)删除所有出现的分隔符后的字段长度之间的差异来做到这一点(REPLACEd 与空''字符串)。这里我们使用DATALENGTH()而不是LEN(),以避免混淆空格。
  2. 确定有多少这样的分隔符。我们通过获取所有分隔符贡献的总长度(以上),然后将其除以单个分隔符的长度来做到这一点DATALENGTH(', ')
  3. BinLocation1推断文本中有多少值。我们通过添加1分隔符的数量(以上)来做到这一点:
--     1       2       3       4          N + 1
   'value1, value2, value3, value4, ..., valueN'
--        ^^      ^^      ^^           ^^
--         1       2       3            N

警告

假设必须坚持每个BinLocation1文本的形式

'value1, value2, value3, value4'

并且没有任何缺失的分隔符

'value1 value2, value3value4'
--     ^              ^

也没有任何额外的分隔符:

  ', value1, value2, , value3, value4, '
-- ^^                ^^              ^^

推荐阅读