问题来源:http://bbs.csdn.net/topics/390991336 。
表1(T1)中存储了单独的id和name字段,部分源数据如下:
id name
1 a
2 b
3 c
4 d
5 e
表2(T2)中存储了多个id组成的ids字段,其值如下:
ids
1,2,3
4,3
1,2,3
现在要根据T1中的id和name,将T2中的ids转化为对应的多个name组成的记录,比如上述T2转换后的结果为:
a,b,c
d,c
a,b,c
集算器实现代码如下:
A1,A2:执行SQL将T1、T2的数据取出。
A3:循环A2中的记录,将每个ids值转为序列后,与T1中的记录匹配得到name序列,而后转换为逗号分隔的记录。结果如下:
上述写法要假定id为整数且连续,如果id不连续,那么A3的写法可以改为:
A3:>A1.primary(id)
A4:=A2.(ids.array().(A1.find(~).name ).string@d())
用SQL实现这个问题需要用到子查询生成一个唯一分组号,再用较复杂的JOIN实现,以MySQL为例写成这样:
select group_concat(t1.name) names from(
select @row:=@row+1 as gid,ids from t2,(SELECT @row :=0 ) r
) t2 left join t1 on find_in_set(t1.id,t2.ids) group by t2.gid
而且,这个SQL只能用于T2的ids无重复值时,如果有重复值结果只会保留一个,比如:“2,1,2,3”算完的结果是”a,b,c”而不是”b,a,b,c”,相对来讲,集算器的语法要更直观易懂且适用面更广
集算器可被报表工具或java程序调用,调用的方法也和普通数据库相似,使用它提供的JDBC接口即可向java主程序返回ResultSet形式的计算结果,具体方法可参考相关文档。
相关推荐
然后遍历DataTable,针对每一行数据,再次查询数据库以获取与之相关的多条记录,将这些记录内容合并后更新回原始数据行。这种方法虽然直观,但如果数据量较大,频繁地打开和关闭数据库连接会导致性能下降。 第二种...
2. JOIN操作:用于将两个或更多表的数据合并在一起,有INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN等类型,根据匹配条件连接相关记录。 3. 分页查询:LIMIT关键字用于获取结果集的一部分,通常与OFFSET配合使用,...
SQL的报表合并和计算是水电管理系统中的另一个重要部分。通过SQL语言,系统能够高效地整合来自不同数据库的数据,进行复杂计算,如统计每户的月度用水电量、计算总费用、生成对比分析等。这有助于管理者快速掌握整体...
SQL合并查询是数据库管理和数据处理中的一个核心概念,它允许我们通过单条SQL语句查询来自多个表的数据。合并查询通常利用子查询来实现,子查询可以嵌套在主查询内部,也可以作为条件表达式的一部分。 在本文中,...
例如,通过JOIN操作合并实物盘点结果和系统数据: ```sql SELECT p.product_name, i.quantity AS system_stock, p.actual_stock AS physical_stock FROM products p JOIN inventory i ON p.product_id = i....
│ │ 2.5.4 计算工作时间的函数.sql │ │ │ └─其他 │ 交叉表.sql │ 任意两个时间之间的星期几的次数-横.sql │ 任意两个时间之间的星期几的次数-纵.sql │ 复杂年月处理.sql │ 统计--交叉表+日期+优先.sql ...
随着大数据时代的到来,SAS也不断扩展其功能以适应更复杂的数据处理需求,其中之一就是SQL(Structured Query Language)的集成使用。 #### 二、SAS中的SQL:结构化查询语言简介 SAS中集成的SQL功能使得用户能够在...
- **Field Calculator**:通过Field Calculator使用SQL语句可以实现属性字段的计算和更新,甚至进行表间的关联计算。 - **VBE环境下ADO方式执行SQL**:在Visual Basic for Applications (VBA)环境中,使用ActiveX ...
7. 联接查询:JOIN操作用于将两个或更多表的数据合并在一起。包括INNER JOIN(只返回匹配的记录)、LEFT JOIN(返回左表所有记录及右表匹配的记录)、RIGHT JOIN(返回右表所有记录及左表匹配的记录)和FULL OUTER ...
6. **连接(JOIN)操作**:LEFT JOIN、INNER JOIN、RIGHT JOIN和FULL OUTER JOIN等用于合并来自多个表的数据,实现复杂的数据查询。 7. **子查询**:在SELECT、FROM或WHERE子句中嵌套查询,用于处理更复杂的逻辑。 ...
“SQL功能与特性.doc”深入探讨了SQL的高级功能,如JOIN操作,用于合并两个或多个表的数据;WHERE子句,用于筛选满足特定条件的记录;GROUP BY和HAVING,用于数据分组和过滤;以及ORDER BY,用于排序结果。此外,...
2. 子查询:嵌套在其他SQL语句中的查询,可以用于过滤、比较或计算数据。 3. 分区函数(PARTITION BY):在GROUP BY的基础上,按照指定列进行分区,每个分区可以独立进行聚合操作。 4. 分页查询:通过ROW_NUMBER()...
- 编写高效的SQL语句,避免冗余计算和不必要的数据返回。 6. **安全与权限管理**: - 用户账号和权限设置,确保只有授权用户能访问数据库。 - 定期备份,防止数据丢失。 - 使用参数化查询防止SQL注入攻击。 ...
- **定义**: SQL 提供了许多内置函数来执行计算。 - **示例**: - `COUNT()` 函数用于统计记录的数量。 - `GROUP BY` 子句用于结合与列列表中的列值匹配的一组行。 - `HAVING` 子句用于筛选 `GROUP BY` 的结果。 ...
6. **聚合函数**:SQL提供了SUM, AVG, COUNT, MAX, MIN等聚合函数,用于计算一组值的总和、平均值、数量、最大值或最小值。例如,`SELECT COUNT(*) FROM Customers` 返回客户表中的记录数。 7. **连接(JOIN)**:...
4. 连接操作:INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN,用于合并两个或更多表的数据。 5. 视图:虚拟表,由SELECT语句定义,可以简化复杂的查询并提供安全访问控制。 三、SQL优化 1. 索引:提高查询速度的...
在IT领域,SQL(Structured Query Language)是一种用于管理和处理关系数据库的强大语言,是数据分析师、数据库管理员和程序员必备的技能之一。"10分钟学会SQL"这个标题暗示我们将快速掌握SQL的基本概念和常用语句。...
- **计算总数**:`COUNT(*)`返回记录数,例如: ```sql SELECT COUNT(*) AS TotalStudents FROM Students ``` - **求和、平均、最大、最小值**:`SUM()`, `AVG()`, `MAX()`, `MIN()`函数分别用于求和、平均、最大值...
接着,联接(JOIN)操作是SQL中的另一核心概念,它允许我们合并来自多个表的数据。有多种类型的联接,如内联接(INNER JOIN)、左联接(LEFT JOIN)、右联接(RIGHT JOIN)和全外联接(FULL OUTER JOIN)。了解何时...