A. sql如何插入表
你的问题太强大了,强大到没看明白
插入表式指创表还是往表中插入数据?
创表 :
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[表名]
GO
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
CREATE TABLE [dbo].[表名] (
[字段1] [类型] ,
[字段2] [类型] ,
[字段3] [类型]
)
END
GO
插数据
insert into [dbo].[表名]([字段1],[字段2],。。。,[字段n]) values ('值1','值2',。。。,'值n');
B. sql语句对表进行汇总
问题没有描述清楚
你说:
比如7月2日发1车,上面有三张单子(车号相同),但只能计算一次
如果 7月2日发10车,上面有110张单子(车号相同),算几次(应该算10次)
这个每次应该有个号吧! 没有号实际上是区分不开的(譬如发一次车有一次序号,这样发10次才知道是十次,根据单据号是不能区分的【按照你的意思】)
实际上你这个就是一个行专列的操作
你要得到结果(这个比较简单)
货主 月份 次数
xxxx 1 23
xxxx 2 46
...
xxxx 12 92
我发个网上的行转列好的文档你看看
标题:普通行列转换(version 2.0)
作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
时间:2008-03-09
地点:广东深圳
说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql server 2005的有关写法。
问题:假设有张学生成绩表(tb)如下:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
想变成(得到如下结果):
姓名 语文 数学 物理
---- ---- ---- ----
李四 74 84 94
张三 74 83 93
-------------------
*/
create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
go
--SQL SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同)
select 姓名 as 姓名 ,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理
from tb
group by 姓名
--SQL SERVER 2000 动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)
--SQL SERVER 2005 静态SQL。
select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b
--SQL SERVER 2005 动态SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + 课程 from tb group by 课程
set @sql = '[' + @sql + ']'
exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')
---------------------------------
/*
问题:在上述结果的基础上加平均分,总分,得到如下结果:
姓名 语文 数学 物理 平均分 总分
---- ---- ---- ---- ------ ----
李四 74 84 94 84.00 252
张三 74 83 93 83.33 250
*/
--SQL SERVER 2000 静态SQL。
select 姓名 姓名,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理,
cast(avg(分数*1.0) as decimal(18,2)) 平均分,
sum(分数) 总分
from tb
group by 姓名
--SQL SERVER 2000 动态SQL。
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) as a
set @sql = @sql + ' , cast(avg(分数*1.0) as decimal(18,2)) 平均分 , sum(分数) 总分 from tb group by 姓名'
exec(@sql)
--SQL SERVER 2005 静态SQL。
select m.* , n.平均分 , n.总分 from
(select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b) m,
(select 姓名 , cast(avg(分数*1.0) as decimal(18,2)) 平均分 , sum(分数) 总分 from tb group by 姓名) n
where m.姓名 = n.姓名
--SQL SERVER 2005 动态SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + ',' , '') + 课程 from tb group by 课程
exec ('select m.* , n.平均分 , n.总分 from
(select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b) m ,
(select 姓名 , cast(avg(分数*1.0) as decimal(18,2)) 平均分 , sum(分数) 总分 from tb group by 姓名) n
where m.姓名 = n.姓名')
drop table tb
C. sql 查询所有表
你这里错了WHERE id=OBJECT_ID(select TABLE_NAME from information_schema.tables where table_type='BASE TABLE') AND indid<2
结构是这样的where id in(Select 。。。。)and 。。。这是id条件是一个集合时或者 where id = (select。。。)and(条件)这是id条件为一个类型值时。不能id=Object_ID又紧接着括号(。。)。我也不知道你要实现什么,你也没说明白。只是说出你错在哪。至于Select里的字符串怎么连接例如:'a' + 'bbb' 加号就是连接运算符了。
D. sql 汇总表
终于把问题搞定!你的问题有一处错误,code为001期末的 kcpr(金额) 应为48.4,而不是56.4。SQL语句如下(假定表名为TEST,已在SQL2000上运行通过):
select code,sum(case when month = 0 and inquantity is not null then inquantity else 0 end) as "qcqua(数量)",sum(case when month=0 and inprice is not null then inprice else 0 end ) as "qcpr(金额)",sum(case when month <>0 and inquantity is not null then inquantity else 0 end) as "nquantity(入数)",sum(case when month<>0 and inprice is not null then inprice else 0 end ) as "npr(金额)",sum(case when outquqntity is not null then outquqntity else 0 end) as "outqu(出数)",sum(case when outprice is not null then outprice else 0 end) as "price(金额)",sum(case when month = 0 and inquantity is not null then inquantity else 0 end)+sum(case when month <>0 and inquantity is not null then inquantity else 0 end)-sum(case when outquqntity is not null then outquqntity else 0 end) as "kcqu(存数)",sum(case when month=0 and inprice is not null then inprice else 0 end )+sum(case when month<>0 and inprice is not null then inprice else 0 end )-sum(case when outprice is not null then outprice else 0 end) as "kcpr(金额)" from test group by code
你试试行不行。注意表的字段类型,金额、数量不能为字符型,否则要用类型转换函数,CODE类型要为字符类,否则前面的0丢失。
E. sql语句 如何创建一个表啊
创建表的SQL语句根据不同的数据库会有所不同,常见的几种数据库创建方式如下:
创建一个表。表名字Persons,第一列Id_P,整数类型;第二列LASTName,字符类型;第三列FirstName,字符类型。
微软VS SQL 2008 数据库
(5)sql表扩展阅读:
结构化查询语言(Structured Query Language)简称SQL,是用于访问和处理数据库的标准的计算机语言,同时也是数据库脚本文件的扩展名。常用的操作:
删除表-- drop table tabname--这是将表连同表中信息一起删除但是日志文件中会有记录;
删除数据库 -- drop database databasename;
删除数据记录 -- "delete from 数据表 where 条件表达式"
F. SQL语句创建表
CREATE TABLE 语句用于创建数据库中的表。
具体用法为:
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
(6)sql表扩展阅读:
创建表数据类型:
integer(size) int(size) smallint(size) tinyint(size):仅容纳整数。
decimal(size,d) numeric(size,d):容纳带有小数的数字。
char(size):容纳固定长度的字符串
varchar(size):容纳可变长度的字符串
date(yyyymmdd):容纳日期。
参考资料:网络-SQL CREATE TABLE
G. sql表结构怎么查询,
加入你的表的名字是 T_tmp,用下面的语句就可以得到你的表结构
select * from syscolumns where id=(select id from sysobjects where name='T_tmp')
H. sql 表结构
column1 datatype [not null] [not null primary key], column2 datatype [not null],...)
说明:
datatype --是资料的格式,详见表。
nut null --可不可以允许资料有空的(尚未有资料填入)。
primary key --是本表的主键。
2、更改表格
alter table table_name add column column_name datatype
说明:增加一个栏位(没有删除某个栏位的语法。)
lter table table_name add primary key (column_name)
说明:更改表得的定义把某个栏位设为主键。
alter table table_name drop primary key (column_name)
说明:把主键的定义删除。
3、建立索引
create index index_name on table_name (column_name)
说明:对某个表格的栏位建立索引以增加查询时的速度。
4、删除
drop table_name
drop index_name
二、资料形态 datatypes
smallint
16 位元的整数。
interger
32 位元的整数。
decimal(p,s)
p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数后有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。
float
32位元的实数。
double
64位元的实数。
char(n)
n 长度的字串,n不能超过 254。
varchar(n)
长度不固定且其最大长度为 n 的字串,n不能超过 4000。
graphic(n)
和 char(n) 一样,不过其单位是两个字符 double-bytes, n不能超过127。这个形态是为支援两个字符长度的字体,例如中文字。
vargraphic(n)
可变长度且其最大长度为 n 的双字符字串,n不能超过 2000。
date
包含了 年份、月份、日期。
time
包含了 小时、分钟、秒。
timestamp
包含了 年、月、日、时、分、秒、千分之一秒。
三、资料操作 dml(data manipulation language)
资料定义好之后接下来的就是资料的操作。资料的操作不外乎增加资料(insert)、查询资料(query)、更改资料(update) 、删除资料(delete)四种模式,以下分 别介绍他们的语法:
1、增加资料:
insert into table_name (column1,column2,...) values ( value1,value2, ...)
说明:
1.若没有指定column 系统则会按表格内的栏位顺序填入资料。
2.栏位的资料形态和所填入的资料必须吻合。
3.table_name 也可以是景观 view_name。
insert into table_name (column1,column2,...) select columnx,columny,... from another_table
说明:也可以经过一个子查询(subquery)把别的表格的资料填入。
2、查询资料:
基本查询
select column1,columns2,... from table_name
说明:把table_name 的特定栏位资料全部列出来
select * from table_name where column1 = xxx [and column2 > yyy] [or column3 <> zzz]
说明:
1.'*'表示全部的栏位都列出来。
2.where 之后是接条件式,把符合条件的资料列出来。
select column1,column2 from table_name order by column2 [desc]
说明:order by 是指定以某个栏位做排序,[desc]是指从大到小排列,若没有指明,则是从小到大排列
组合查询
组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的表格才能够得到结果的。
select * from table1,table2 where table1.colum1=table2.column1
说明:
1.查询两个表格中其中 column1 值相同的资料。
2.当然两个表格相互比较的栏位,其资料形态必须相同。
3.一个复杂的查询其动用到的表格可能会很多个。
整合性的查询:
select count (*) from table_name where column_name = xxx
说明:
查询符合条件的资料共有几笔。
select sum(column1) from table_name
说明:
1.计算出总和,所选的栏位必须是可数的数字形态。
2.除此以外还有 avg() 是计算平均、max()、min()计算最大最小值的整合性查询。
select column1,avg(column2) from table_name group by column1 having avg(column2) > xxx
说明:
1.group by: 以column1 为一组计算 column2 的平均值必须和 avg、sum等整合性查询的关键字一起使用。
2.having : 必须和 group by 一起使用作为整合性的限制。
复合性的查询
select * from table_name1 where exists ( select * from table_name2 where conditions )
说明:
1.where 的 conditions 可以是另外一个的 query。
2.exists 在此是指存在与否。
select * from table_name1 where column1 in ( select column1 from table_name2 where conditions )
说明:
1. in 后面接的是一个集合,表示column1 存在集合里面。
2. select 出来的资料形态必须符合 column1。
其他查询
select * from table_name1 where column1 like 'x%'
说明:like 必须和后面的'x%' 相呼应表示以 x为开头的字串。
select * from table_name1 where column1 in ('xxx','yyy',..)
说明:in 后面接的是一个集合,表示column1 存在集合里面。
select * from table_name1 where column1 between xx and yy
说明:between 表示 column1 的值介于 xx 和 yy 之间。
3、更改资料:
update table_name set column1='xxx' where conditoins
说明:
1.更改某个栏位设定其值为'xxx'。
2.conditions 是所要符合的条件、若没有 where 则整个 table 的那个栏位都会全部被更改。
4、删除资料:
delete from table_name where conditions
说明:删除符合条件的资料。
说明:关于where条件后面如果包含有日期的比较,不同数据库有不同的表达式。具体如下:
(1)如果是access数据库,则为:where mydate>#2000-01-01#
(2)如果是oracle数据库,则为:where mydate>cast('2000-01-01' as date) 或:where mydate>to_date('2000-01-01','yyyy-mm-dd')
在delphi中写成:
thedate='2000-01-01';
query1.sql.add('select * from abc where mydate>cast('+''''+thedate+''''+' as date)');
如果比较日期时间型,则为:
where mydatetime>to_date('2000-01-01 10:00:01','yyyy-mm-dd hh24:mi:ss')
I. sql 表 定义
是指MSSQL?这个在MSSQL里是错误的,如果需要特殊处理也是用“[]”来括起来,比如说表、字段名称中有空格,或是MSSQL里的保存关键字等等,都需要[]括起来。
J. 如何用SQL创建一个表格
1、打开SQL Server,在数据库处,右键数据库,点击新建数据库。