首页 > 解决方案 > 如何从列中提取数据并插入数组并添加值

问题描述

数据库:

ID | CID |    HOURS
1  | 201 |  8, 8, 8, 8
2  | 201 |  2, 4, 7, 5
3  | 201 |  4, 3, 7, 1

如何提取 HOURS 列中的值并添加值以在 HTML 表上生成结果:

   TOTAL HOURS: 14  |  15  |  22  | 14 

我假设需要将 Hours 列中的值插入到数组中?所以,我做了一个while循环并分解结果并得到以下结果:

while($row = sqlsrv_fetch_object($result)) {
    $hours = explode(', ', $hours)
}

我做了一个 print_r($hours, 1) 并得到以下信息:

Array
(
    [0] => 8
    [1] => 8
    [2] => 8
    [3] => 8
Array
(
    [0] => 2
    [1] => 4
    [2] => 7
    [3] => 5
)
Array
(
    [0] => 4
    [1] => 3
    [2] => 7
    [3] => 1
)

我如何循环这个来做计算?

标签: phpsql-server-2016

解决方案


撇开逗号分隔的数据作为反模式不谈,可以在单个查询中返回聚合值,而无需通过 using 循环任何内容string_split,其基础是:

select
  Sum(case col when 1 then v end),
  Sum(case col when 2 then v end),
  Sum(case col when 3 then v end),
  Sum(case col when 4 then v end)
from (
    select v, row_number() over(partition by id order by id) col
    from t
    cross apply(
    select Cast(value as int)v from String_Split(t.hours,',')
    )v
)v

演示小提琴


推荐阅读