在最近的项目中使用ActiveReports报表设计器设计一个报表模板时,遇到一个多级分类的难题:需要将某个部门所有销售及下属部门的销售金额汇总,因为下属级别的层次不确定,所以靠拼接子查询的方式显然是不能满足要求,经过一番实验,利用了CTE(Common Table Expression)很轻松解决了这个问题! 举例:有如下的部门表 以及员工表 如果想查询所有西北区的员工(包含西北.西安.兰州),如下图所示: 如何用CTE的方式实现呢? Talk is cheap. Show me the co…
你可能在批量处理一个事务的时候,想要批量插入一系列的数据,但是这些数据当添加完一次之后,重新添加的时候,你不想要重新添加,只是想将原有的数据进行更新,例如:我想要通过Excel将一系列的图书导入到数据库中,而这些图书在你下一次编辑之后,重新导入,只是对原有的数据进行修改.以上是一个业务的场景. 在MSSQL中,你可以使用诸如: ? IF NOT EXISTS(SELECT * FROM Book WHERE ….) THEN INSERT INTO ... ELSE UPDATE SET .…
SQLite中的SELECT子句使用通配符 在SELECT子句中支持两个通配符,分别为*和table_name.*.其中,*通配符会将FROM子句中每个源表的所有用户定义的列进行输出.例如,下面的SQL语句将输出Students的所有用户定义的列. SELECT * FROM Students 运行程序,执行效果如图3.5所示. 图3.5 *通配符 table_name.*可以用来指定输出列所在表的名称,这里输出的列都是用户定义的列.虽然*和table_name.*通配符都可以输出多列,但…
SQLite中的SELECT子句使用别名 开发者可以使用AS关键字为指定的列名提供一个新的别名,其语法形式如下 SELECT column_name AS Alias [,…] 例如,下面的SQL语句为Name列设置了一个别名StudentName. SELECT id,Name AS StudentName FROM Students 运行程序,执行效果如图3.4所示. 图3.4 定义别名…
SQLite中的SELECT子句 目前为止,最常见的SELECT语句由三个子句组成,分别为SELECT.FROM与WHERE.本小节我们首先讲解SELECT子句.SELECT子句可以用来定义最终结果表的格式和内容.要显示在最终结果表中的列必须由SELECT子句中的select_heading定义,如果是多列,使用“,”分隔. [示例3-1]下面将使用查询语句获取Students表中的id列和Name列内容.SQL语句如下: SELECT id,Name FROM Students 运行程序,执行…
题目描述 给出每个员工每年薪水涨幅超过5000的员工编号emp_no.薪水变更开始日期from_date以及薪水涨幅值salary_growth,并按照salary_growth逆序排列. 提示:在sqlite中获取datetime时间对应的年份函数为strftime('%Y', to_date) CREATE TABLE `salaries` (`emp_no` int(11) NOT NULL,`salary` int(11) NOT NULL,`from_date` date NOT NU…
最近要更新Cocon90.Db库,令其ORM创建表时实现索引的添加.因此总结下列常用Sql,供大家学习与参考. 一.SqlServer中创建索引可以这样: ) Create Table Test ( RowId ) NOT NULL, Name ) NOT NULL , Type int NULL, PRIMARY KEY (RowId,Name), INDEX idxType(Type), INDEX idxName(Name) ); 二.MySql中需要这样: CREATE TABLE IF…
1.SQLite不支持关键字AUTO_INCREMENT 1)AUTO_INCREMENT不生效的问题 SQL语句: CREATE TABLE todo ( id INTEGER AUTO_INCREMENT, title TEXT, PRIMARY KEY (id) ); 问题描述:按照上述SQL语句创建表todo,用INSERT INTO todo (title) VALUES ('xxx')插入记录,但查询该记录后得到的id为NULL(即Python中的None)…
SQLite中特殊的INSERT语句 在SQLite中,INSERT是基本语句,用来向表中插入数据.但是当表中存在字段存在唯一.非空.检查.主键等约束时,插入的数据很容易和约束冲突,造成插入操作失败.为了解决这类问题,SQLite提供集中特殊的INSERT语句.下面依次介绍一下: (1)INSERT OR REPLACE语句:如果引起约束冲突,则取消插入操作.如果是与唯一.主键约束冲突,则将已存在的数据进行更新.如果是与非空约束操作,并且存在默认值设置,则将冲突的空列使用默认值替代,然后…
一.sqlite中不能使用日期进行相减,执行结果无效 例如:SELECT count(*) as cnt FROM DayBanalces WHERE (date(ofDay)- date('2013-04-26 00:00:00'))=0 × 正确: SELECT count(*) as cnt FROM DayBanalces WHERE (date(ofDay) = date('2013-04-26 00:00:00')) 二.sqlite中 0 与0.0的差别 首先…