【问题标题】:SQL query, adding up values which contain stringSQL查询,将包含字符串的值相加
【发布时间】:2017-12-20 19:39:54
【问题描述】:

我有这张桌子:

我想计算一下 Bond Brothers 每小时运营多少趟巴士 并且预期结果是每小时 7 个

我的问题是如何将包含字符串的值相加?

SELECT Operator, SUM(Frequency) AS “Total Frequency”
FROM Bus Routes

我认为这行不通吗?

谢谢

【问题讨论】:

  • 有什么办法可以将字符串更改为简单地说“6”而不是“每小时 6”?您当前拥有的内容需要进行字符串解析。
  • SUM() 将适用于数字值,您在其中有文本。或者您在图片中显示的是应用程序视图?所以我们无法知道数据库实际包含什么。仅供参考数据库问题,添加此信息:您正在使用哪个数据库,表定义,实际显示数据库中的数据,而不是应用程序处理。
  • 频率是否总是“每小时”?
  • 您使用的是哪个DBMS 产品?后格雷斯?甲骨文? “SQL”只是一种查询语言,而不是特定数据库产品的名称。

标签: sql


【解决方案1】:

为此

declare @table as table (
    group_id int,
    content varchar(100)
)

insert into @table values (2, '2 per hour')
insert into @table values (1, '1 per hour')
insert into @table values (1, '6 per hour')
insert into @table values (1, '')
insert into @table values (3, '9 per hour')
insert into @table values (3, null)

select * from @table

select t.group_id, SUM(t.content) content_sum
    from  (select group_id, convert(int, REPLACE(content, ' per hour', '')) 
content from @table) t
    group by t.group_id

【讨论】:

  • 假设“每小时”部分是一致的,我认为这是一个很好的答案!
【解决方案2】:

借用这个How to get the numeric part from a string using T-SQL?,你可以做这样的事情(注意转换为整数):

SELECT Operator, SUM(CAST(left(Frequency, patindex('%[^0-9]%', Frequency+'.') - 1) AS INT))
FROM 
(VALUES
('2 per hour','Ok Travel')
,('6 per hour','Diamond Buses')
,('1 per hour','Bond Brothers')
,('6 per hour','Bond Brothers')
,('','Diamond Buses')
) BusRulles(Frequency,Operator)
GROUP BY Operator

【讨论】:

    【解决方案3】:
    WITH CTE AS(
    SELECT  ts.Destination ,
            CONVERT(INT,REPLACE(ts.Frequency, ' per hour','')) AS Frequency ,
            ts.Operator ,
            ts.[Route Number] ,
            ts.Start
    FROM dbo.temp_Sqlcheck ts
    WHERE ts.Frequency IS NOT NULL OR ts.Frequency <>''
    )
    
    SELECT CTE.Operator, SUM(CTE.Frequency) AS Frequency from CTE
    GROUP BY CTE.Operator 
    

    这不会计算频率中的 NULL 或空白值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-14
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多