当前位置:文档之家› SQL 列变行

SQL 列变行

SQL 列变行
SQL 列变行

declare @sql1 varchar(8000)

set @sql1 = 'select Subject as ' + '分店'

select @sql1 = @sql1 + ' , max(case Name when ''' + Name + ''' then Result else 0 end) [' + Name + ']'

from (select distinct Name from ztbb) as a

set @sql1 = @sql1 + ' , cast(avg(result*1.0) as decimal(18,2)) 平均分,sum(result) 总分 from ztbb group by Subject order by 分店 '

exec(@sql1)

原表

sql 列变行(小技巧)

2010年12月16日星期四下午 08:40

Name Subject Result

张三语文74

张三数学83

张三物理93

李四语文74

李四数学84

李四物理94

想变成

姓名语文数学物理

---------- ----------- ----------- -----------

李四 74 84 94

张三 74 83 93

create table tb

(

Name varchar(10) ,

Subject varchar(10) ,

Result int

)

insert into tb(Name , Subject , Result) values('张三' , '语文' , 74)

insert into tb(Name , Subject , Result) values('张三' , '数学' , 83)

insert into tb(Name , Subject , Result) values('张三' , '物理' , 93)

insert into tb(Name , Subject , Result) values('李四' , '语文' , 74)

insert into tb(Name , Subject , Result) values('李四' , '数学' , 84)

insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)

go

--静态SQL,指subject只有语文、数学、物理这三门课程。

select name 姓名,

max(case subject when '语文' then result else 0 end) 语文,

max(case subject when '数学' then result else 0 end) 数学,

max(case subject when '物理' then result else 0 end) 物理

from tb

group by name

姓名语文数学物理

---------- ----------- ----------- -----------

李四 74 84 94

张三 74 83 93

--动态SQL,指subject不止语文、数学、物理这三门课程。

declare @sql varchar(8000)

set @sql = 'select Name as ' + '姓名'

select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else

0 end) [' + Subject + ']'

from (select distinct Subject from tb) as a

set @sql = @sql + ' from tb group by name'

exec(@sql)

姓名数学物理语文

---------- ----------- ----------- -----------

李四 84 94 74

张三 83 93 74

-------------------------------------------------------------------

加个平均分,总分

姓名语文数学物理平均分总

---------- ----------- ----------- ----------- -------------------- ----------- 李四 74 84 94 84.00 252

张三 74 83 93 83.33 250

--静态SQL,指subject只有语文、数学、物理这三门课程。

select name 姓名,

max(case subject when '语文' then result else 0 end) 语文,

max(case subject when '数学' then result else 0 end) 数学,

max(case subject when '物理' then result else 0 end) 物理,

cast(avg(result*1.0) as decimal(18,2)) 平均分,

sum(result) 总分

from tb

group by name

姓名语文数学物理平均分总

---------- ----------- ----------- ----------- -------------------- ----------- 李四 74 84 94 84.00 252

张三 74 83 93 83.33 250

--动态SQL,指subject不止语文、数学、物理这三门课程。

declare @sql1 varchar(8000)

set @sql1 = 'select Name as ' + '姓名'

select @sql1 = @sql1 + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'

from (select distinct Subject from tb) as a

set @sql1 = @sql1 + ' , cast(avg(result*1.0) as decimal(18,2)) 平均分,sum(result) 总分 from tb group by name'

exec(@sql1)

姓名数学物理语文平均分总

---------- ----------- ----------- ----------- -------------------- ----------- 李四 84 94 74 84.00 252

张三 83 93 74 83.33 250

drop table tb

---------------------------------------------------------

如果上述两表互相换一下:即

姓名语文数学物理

张三 74 83 93

李四 74 84 94

想变成

Name Subject Result

---------- ------- -----------

李四语文 74

李四数学 84

李四物理 94

张三语文 74

张三数学 83

张三物理 93

create table tb1

(

姓名 varchar(10) ,

语文 int ,

数学 int ,

物理 int

)

insert into tb1(姓名 , 语文 , 数学 , 物理) values('张三',74,83,93)

insert into tb1(姓名 , 语文 , 数学 , 物理) values('李四',74,84,94)

select * from

(

select 姓名 as Name , Subject = '语文' , Result = 语文 from tb1

union all

select 姓名 as Name , Subject = '数学' , Result = 数学 from tb1

union all

select 姓名 as Name , Subject = '物理' , Result = 物理 from tb1

) t

order by name , case Subject when '语文' then 1 when '数学' then 2 when '物理' then 3 when '总分' then 4 end

--------------------------------------------------------------------

加个平均分,总分

Name Subject Result

---------- ------- --------------------

李四语文 74.00

李四数学 84.00

李四物理 94.00

李四平均分 84.00

李四总分 252.00

张三语文 74.00

张三数学 83.00

张三物理 93.00

张三平均分 83.33

张三总分 250.00

select * from

(

select 姓名 as Name , Subject = '语文' , Result = 语文 from tb1

union all

select 姓名 as Name , Subject = '数学' , Result = 数学 from tb1

union all

select 姓名 as Name , Subject = '物理' , Result = 物理 from tb1

union all

select 姓名 as Name , Subject = '平均分' , Result = cast((语文 + 数学 + 物理)*1.0/3 as decimal(18,2)) from tb1

union all

select 姓名 as Name , Subject = '总分' , Result = 语文 + 数学 + 物理 from tb1 ) t

order by name , case Subject when '语文' then 1 when '数学' then 2 when '物理' then 3 when '平均分' then 4 when '总分' then 5 end

drop table tb1

sql中将数字转换为字符串—STR()

sql 中将数字转换为字符串的最简单方法 2010年01月22日星期五下午08:04 STR 由数字数据转换来的字符数据。 语法 STR (float_expression[ ,length[ ,decimal] ] ) 参数 float_expression 是带小数点的近似数字(float) 数据类型的表达式。 length 是总长度,包括小数点、符号、数字或空格。默认值为10。 decimal 是小数点右边的位数。 返回类型 char 注释 如果为STR 提供length和decimal参数值,则这些值应该是正数。在默认情况下或者小数参数为0 时,数字四舍五入为整数。指定长度应该大于或等于小数点前面的数字加上数字符号(若有)的长度。短的float_expression在指定长度内右对齐,长的float_expression则截断为指定的小数位数。例如,STR(12,10) 输出的结果是12,在结果集内右对齐。而STR(1223, 2) 则将结果集截断为**。可以嵌套字符串函数。 说明若要转换为Unicode 数据,请在CONVERT 或CAST 转换函数内使用STR。示例 A. 使用STR 下例将包含五个数字和一个小数点的表达式转换为有六个位置的字符串。数字的小数部分四

舍五入为一个小数位。 SELECT STR(123.45, 6, 1) GO 下面是结果集: ------ 123.5 (1 row(s) affected) 当表达式超出指定长度时,字符串为指定长度返回**。 SELECT STR(123.45, 2, 2) GO 下面是结果集: -- ** (1 row(s) affected) 即使数字数据嵌套在STR内,结果集也是带指定格式的字符数据。SELECT STR (FLOOR (123.45), 8, 3) GO 下面是结果集: -------- 123.000 (1 row(s) affected) B. 使用STR 和CONVERT 函数

数据挖掘期末大作业任务

数据挖掘期末大作业 1.数据挖掘的发展趋势是什么?大数据环境下如何进行数据挖掘。 对于数据挖掘的发展趋势,可以从以下几个方面进行阐述: (1)数据挖掘语言的标准化描述:标准的数据 挖掘语言将有助于数据挖掘的系统化开发。改进多个数据挖掘系统和功能间的互操作,促进其在企业和社会中的使用。 (2)寻求数据挖掘过程中的可视化方法:可视 化要求已经成为数据挖掘系统中必不可少的技术。可以在发现知识的过程中进行很好的人机交互。数据的可视化起到了推动人们主动进行知识发现的作用。 (3)与特定数据存储类型的适应问题:根据不 同的数据存储类型的特点,进行针对性的研究是目前流行以及将来一段时间必须面对的问题。 (4)网络与分布式环境下的KDD问题:随着 Internet的不断发展,网络资源日渐丰富,这就需要分散的技术人员各自独立地处理分离数据库的工作方式应是可协作的。因此,考虑适应分布式与网络环境的工具、技术及系统将是数据挖掘中一个最为重要和繁荣的子领域。 (5)应用的探索:随着数据挖掘的日益普遍,其应用范围也日益扩大,如生物医学、电信业、零售业等 领域。由于数据挖掘在处理特定应用问题时存在局限性,因此,目前的研究趋势是开发针对于特定应用的数据挖掘系统。 (6)数据挖掘与数据库系统和Web数据库系统的集成:数据库系统和Web数据库已经成为信息处 理系统的主流。 2. 从一个3输入、2输出的系统中获取了10条历史数据,另外,最后条数据是系统的输 入,不知道其对应的输出。请使用SQL SERVER 2005的神经网络功能预测最后两条数据的输出。 首先,打开SQL SERVER 2005数据库软件,然后在界面上右键单击树形图中的“数据库”标签,在弹出的快捷菜单中选择“新建数据库”命令,并命名数据库的名称为YxqDatabase,单击确定,如下图所示。 然后,在新建的数据库YxqDatabas中,根据题目要求新建表,相应的表属性见下图所示。

sql server 2008 数据类型

SQL Server 2008数据类型(1) SQL Server 2008数据类型(1) 在创建表时,必须为表中的每列指派一种数据类型。本节将介绍SQL Server中最常用的一些数据类型。即使创建自定义数据类型,它也必须基于一种标准的SQL Server数据类型。例如,可以使用如下语法创建一种自定义数据类型(Address),但要注意,它基于SQL Server标准的varchar数据类型。 1.CREATE TYPE Address 2.FROM varchar(35) NOT NULL 如果在SQL Server Management Studio的表设计界面中更改一个大型表中某列的数据类型,那么该操作可能需要很长时间。可以通过在Management Studio界面中脚本化这种改变来观察其原因。Management Studio再创建一个临时表,采用像tmpTableName这样的名称,然后将数据复制到该表中。最后,界面删除旧表并用新的数据类型重命名新表。当然,此过程中还涉及其他一些用于处理表中索引和其他任何关系的步骤。 如果有一个包含数百万条记录的大型表,则该过程可能需要花费十分钟,有时可能是数小时。为避免这种情况,可在查询窗口中使用简单的单行T-SQL语句来更改该列的数据类型。例如,要将Employees表中JobTitle列的数据类型改为varchar(70),可以使用如下语法。 1.ALTER TABLE HumanResources.Employee ALTER COLUMN JobTitle Varchar(70 ) 说明: 在转换为与当前数据不兼容的数据类型时,可能丢失重要数据。例如,如果要将包含一些数据(如15.415)的numeric数据类型转换为integer数据类型,那么15.415这个数据将四舍五入为整数。 您可能想对SQL Server表编写一个报表,显示表中每列的数据类型。完成这项任务的方法有很多种,但最常见的一种方法是连接sys.objects表和sys.columns表。在下面的代码中,有两个函数可能不太为您所熟悉。函数TYPE_NAME()将数据类型id转换为适当的名称。要进行反向操作,可使用TYPE_ID()函数。需要注意的另一个函数是SCHEMA_ID(),它用于返回架构的标识值。在需要编写有关SQL Server元数据的报表时,这是特别有用的。 1.SELECT https://www.doczj.com/doc/ba4125417.html, AS ObjectName, 2. https://www.doczj.com/doc/ba4125417.html, AS ColumnName, 3.TYPE_NAME(https://www.doczj.com/doc/ba4125417.html,er_type_id) as DataType 4.FROM sys.objects o JOIN sys.columns c 5.ON o.object_id = c.object_id

SQL数据库字段类型说明

SQL数据库字段类型说明

1)char、varchar、text和nchar、nvarchar、ntext char和varchar的长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据。所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。 后面三种数据类型和前面的相比,从名称上看只是多了个字母n,它表示存储的是Unicode数据类型的字符。写过程序的朋友对Unicode应该很了解。字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较:nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar 最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。 (2)datetime和smalldatetime datetime:从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒。 smalldatetime:从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。 (3)bitint、int、smallint、tinyint和bit bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据。 int:从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据。smallint:从-2^15(-32,768)到2^15-1(32,767)的整数数据。 tinyint:从0到255的整数数据。 bit:1或0的整数数据。 (4)decimal和numeric 这两种数据类型是等效的。都有两个参数:p(精度)和s(小数位数)。p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p 之间的值,默认小数位数是0。 (5)float和real float:从-1.79^308到1.79^308之间的浮点数字数据。 real:从-3.40^38到3.40^38之间的浮点数字数据。在SQL Server中,real 的同义词为float(24)。

SQL数据库期末大作业

学校:北京联合大学 系别:信息管理系 姓名:孙超 学号:2013110444006 《餐饮业信息管理系统的开发》 1、本项目的需求分析 随着今年来中国餐饮行业的日益火爆,在强烈的行业竞争中,一个高效的餐饮信息管理系统的应用,无疑是至关重要的。高效,便捷的管理系统,不仅仅极大的方便了食客的就餐,同时对于餐饮公司的各项信息管理有着很大的帮助,同时,我们的餐饮信息管理系统还能帮助餐厅降低错误率,扩大营业范围,增加知名度等。 为了使得系统在操作的过程中,更加便捷,具有针对性,本次系统设计主要分为:员工登陆操作信息系统,以及店主操作管理信息系统。不同的设计从而达到不同的功能,实现信息的有效传达与管理。 第一:在员工使用本餐饮信息管理系统应可以实现以下功能: 1.添加修改查询客户会员信息(修改客户信息需客户确认) 2.查询菜单 3.添加查询预定信息,为老顾客打折 4.客户可以在自己的会员账户里充值 5.顾客可以用现金买单也可以从会员账户里扣取 第二:管理员使用本餐饮信息管理系统应可以实现以下功能: 1.添加修改查询客户会员信息(修改客户信息需客户确认) 2.添加修改查询菜单信息,最好能看到菜品图片 3.添加查询预定信息,为老顾客打折 4.客户可以在自己的会员账户里充值 5.顾客可以用现金买单也可以从会员账户里扣取 6.设定具体的打折方法 7.添加职员信息,权限也可以定为管理员。 8.可以查询使用者的现金收款金额。 二、餐饮业管理数据库管理系统的E-R模型(概念结构设计) 1.用户(员工)的信息:

编号、密码、类型、姓名、电话、收款金额 2.客户信息: 用户编号、客户编号、姓名、电话、密码、开卡时间、卡内余额 3.食谱: 类型、名称、价格、配料、照片 4.预定: 用户编号、日期、预定时间、客户姓名、类型、预定食谱、桌号5桌台管理: 桌号、使用情况、 6.点餐管理: 用户编号、类型、菜品、数量、价格、照片 7.盈利管理: 日期、日支出金额、店内收入、外卖收入、盈利额度 各对象之间的联系图: 用户E-R图 主要存储一些用户信息,如用户的账号、密码和类型地点等等,主要用于用户登录,添加客户和添加预定时会使用到用户信息。

跪求sql server2012行转列方案

下面为表创建代码: create table [dbo].[productauditrecord]([parid] [nchar](12) not null,[moid] [nchar](12) not null,[lotsn] [nvarchar](50) not null,[cosmeticinspection] [nchar](12) not null,[functionaltest] [nchar](12) not null,[unumber] [nchar](50) null,[leadwire] [nchar](50) null,[resourceid] [nchar](12) not null,[userid] [nchar](12) not null,[remark] [nvarchar](100) null,[creatdate] [datetime] not null,[productid] [nchar](12) not null,[nextid] [int] not null, constraint [pk_productauditrecord] primary key clustered ([parid] asc)with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary]) on [primary]goalter table [dbo].[productauditrecord] add constraint [df_productauditrecord_parid] default (substring(convert([char](36), newid(),(0)),(1),(12))) for [parid]goalter table [dbo]. [productauditrecord] add constraint [df_productauditrecord_nextid] default ((0)) for [nextid]go 下面为自己测试数据得到的结果:上面为原始数据,下面为转换后的数据:转换代码测试表代码:create table [dbo].[test]( [月份] [varchar](4) null, [工资] [int] null, [福利] [int] null, [奖金] [int] null ) on [primary] 1:月份工资福利奖金 1月100 200 300 2月110 210 310 3月120 220 320 4月130 230 330 2:考核月份1月2月3月4月 福利200 210 220 230 工资100 110 120 130 奖金300 310 320 330

SQL 统计 字段 竖向转横向 (行转列)显示

在做一些SQL统计时,为了更直观看到结果,并进行比较,需要把竖向表的部分统计字段转成横向显示。 原数据格式: wbname news time ------------------------------ 潇湘晨报直播报道 佛山日报后天 扬子晚报昨天 扬子晚报昨天 足球报直播报道 足球报直播报道 中山日报昨天 要统计成横向结构 wbname 昨天直播报道后天 ------------------------------------------------------ 潇湘晨报0 1 0 佛山日报 0 0 1 扬子晚报 2 0 0 足球报 0 2 0 中山日报 1 0 0 数据库表的结构 Field Type -------- ----------- id int(11) wbname varchar(50) newstime varchar(50) 测试数据(MySQL) insert into `wb`(`id`,`wbname`,`newstime`) values (1,'潇湘晨报','直播报道'),

(2,'佛山日报','后天'), (3,'扬子晚报','昨天'), (4,'扬子晚报','昨天'), (5,'足球报','直播报道'), (6,'足球报','直播报道'), (7,'中山日报','昨天'), (8,'中山日报','当天'), (9,'中山日报','直播报道'), (10,'钱江晚报','直播报道'), (11,'南方日报','时间不详'), (12,'广州日报','直播报道'), (13,'中国经营报','时间不详'), (14,'中国经营报','时间不详'), (15,'中国经营报','上周'), (16,'烟台日报传媒集团','时间不详'), (17,'烟台日报传媒集团','其他'), (18,'烟台日报传媒集团','上周'), (19,'扬子晚报','时间不详'), (20,'扬子晚报','上周'), (21,'扬子晚报','时间不详'), (22,'扬子晚报','时间不详'), (23,'扬子晚报','当天'), (24,'扬子晚报','时间不详'), (25,'潇湘晨报','时间不详'), (26,'足球报','直播报道'), (27,'足球报','直播报道'), (28,'潇湘晨报','其他'), (29,'潇湘晨报','其他'), (30,'足球报','直播报道'), (31,'足球报','直播报道'), (32,'足球报','直播报道'), (33,'足球报','直播报道'), (34,'足球报','直播报道'), (35,'足球报','直播报道'), (36,'潇湘晨报','当天'), (37,'足球报','直播报道'), (38,'潇湘晨报','直播报道'), (39,'潇湘晨报','直播报道'), (40,'潇湘晨报','直播报道'), (41,'潇湘晨报','直播报道'); 主角:SQL语句

sqlserver2008数据类型说明

sqlserver2008数据类型说明 SQL Server 2008数据类型(1) 在创建表时,必须为表中的每列指派一种数据类型。本节将介绍SQL Server中最常用的一些数据类型。即使创建自定义数据类型,它也必须基于一种标准的SQL Server数据类型。例如,可以使用如下语法创建一种自定义数据类型(Address),但要注意,它基于SQL Server标准的varchar数据类型。 1.CREATE TYPE Address 2.FROM varchar(35) NOT NULL 如果在SQL Server Management Studio的表设计界面中更改一个大型表中某列的数据类型,那么该操作可能需要很长时间。可以通过在Management Studio界面中脚本化这种改变来观察其原因。Management Studio再创建一个临时表,采用像tmpTableName这样的名称,然后将数据复制到该表中。最后,界面删除旧表并用新的数据类型重命名新表。当然,此过程中还涉及其他一些用于处理表中索引和其他任何关系的步骤。 如果有一个包含数百万条记录的大型表,则该过程可能需要花费十分钟,有时可能是数小时。为避免这种情况,可在查询窗口中使用简单的单行T-SQL语句来更改该列的数据类型。例如,要将Employees表中JobTitle列的数据类型改为varchar(70),可以使用如下语法。 1.ALTER TABLE HumanResources.Employee ALTER COLUMN JobTitle Varchar(70 ) 说明: 在转换为与当前数据不兼容的数据类型时,可能丢失重要数据。例如,如果要将包含一些数据(如15.415)的numeric数据类型转换为integer数据类型,那么15.415这个数据将四舍五入为整数。 您可能想对SQL Server表编写一个报表,显示表中每列的数据类型。完成这项任务的方法有很多种,但最常见的一种方法是连接sys.objects表和sys.columns表。在下面的代码中,有两个函数可能不太为您所熟悉。函数TYPE_NAME()将数据类型id转换为适当的名称。要进行反向操作,可使用TYPE_ID()函数。需要注意的另一个函数是SCHEMA_ID(),它用于返回架构的标识值。在需要编写有关SQL Server元数据的报表时,这是特别有用的。 1.SELECT https://www.doczj.com/doc/ba4125417.html, AS ObjectName, 2. https://www.doczj.com/doc/ba4125417.html, AS ColumnName, 3.TYPE_NAME(https://www.doczj.com/doc/ba4125417.html,er_type_id) as DataType 4.FROM sys.objects o JOIN sys.columns c 5.ON o.object_id = c.object_id

SQL数据库期末大作业91411

Hefei University 《数据库期末大作业》 餐饮业信息管理系统的开发 专业:电子信息工程 班级:13电子1班 姓名:李云 学号:1305011005

指导老师:史俊朗 完成时间:2016-12-28 一、本项目的需求分析 随着今年来中国餐饮行业的日益火爆,在强烈的行业竞争中,一个高效的餐饮信息管理系统的应用,无疑是至关重要的。高效,便捷的管理系统,不仅仅极大的方便了食客的就餐,同时对于餐饮公司的各项信息管理有着很大的帮助,同时,我们的餐饮信息管理系统还能帮助餐厅降低错误率,扩大营业范围,增加知名度等。 为了使得系统在操作的过程中,更加便捷,具有针对性,本次系统设计主要分为:员工登陆操作信息系统,以及店主操作管理信息系统。不同的设计从而达到不同的功能,实现信息的有效传达与管理。 第一:在员工使用本餐饮信息管理系统应可以实现以下功能: 1.添加修改查询客户会员信息(修改客户信息需客户确认) 2.查询菜单 3.添加查询预定信息,为老顾客打折 4.客户可以在自己的会员账户里充值 5.顾客可以用现金买单也可以从会员账户里扣取 第二:管理员使用本餐饮信息管理系统应可以实现以下功能: 1.添加修改查询客户会员信息(修改客户信息需客户确认) 2.添加修改查询菜单信息,最好能看到菜品图片

3.添加查询预定信息,为老顾客打折 4.客户可以在自己的会员账户里充值 5.顾客可以用现金买单也可以从会员账户里扣取 6.设定具体的打折方法 7.添加职员信息,权限也可以定为管理员。 8.可以查询使用者的现金收款金额。 二、餐饮业管理数据库管理系统的E-R模型(概念结构设计) 1.用户(员工)的信息: 编号、密码、类型、姓名、电话、收款金额 2.客户信息: 用户编号、客户编号、姓名、电话、密码、开卡时间、卡内余额 3.食谱: 类型、名称、价格、配料、照片 4.预定: 用户编号、日期、预定时间、客户姓名、类型、预定食谱、桌号5桌台管理: 桌号、使用情况、 6.点餐管理: 用户编号、类型、菜品、数量、价格、照片 7.盈利管理: 日期、日支出金额、店内收入、外卖收入、盈利额度 各对象之间的联系图:

oracle列转行sql详细讲解

--当期时间贷款时间 SELECT DK_ID, max(substr(activeDate, 2)) activeDate FROM (SELECT DK_ID, sys_connect_by_path(activeDate, ',') activeDate FROM (SELECT DK_ID, activeDate, DK_ID || rn rchild, DK_ID || (rn - 1) rfather FROM (SELECT TEMP.DK_ID, --查询项目所在地树形结构全名 SELECT t.area_id, substr(sys_connect_by_path(t.area_name, '-'), 2) as allname , connect_by_root t.area_name as root, --是单一操作符,返回当前层的最顶层节点connect_by_isleaf as IsLeaf, --是伪列,判断当前层是否为叶子节点,1代表是,0代表否 level as lel --是伪列,显示当前节点层所处的层数 FROM dk_project_area_info t START WITH t.area_name = '项目所在地' CONNECT BY PRIOR t.area_id = t.area_pid SYS_CONNECT_BY_PATH 学习2008-09-08 10:59SELECT ename FROM scott.emp START WITH ename = 'KING' CONNECT BY PRIOR empno = mgr; 得到结果为:KING JONES SCOTT ADAMS FORD SMITH BLAKE ALLEN WARD MARTIN TURNER JAMES

sql数据类型转换

sql数据类型转换(cast() and convent())函数) sql数据类型转换(cast() and convent())函数) 当Microsoft? SQL Server? 2000 不自动执行不同数据类型的表达式转换时,可使用转换函数 CAST 和 CONVERT 进行转换。这些转换函数还可用来获得各种特殊的数据格式。这两个转换函数都可用于选择列表、WHERE 子句和允许使用表达式的任何地方。 如果希望 Transact-SQL 程序代码遵从 SQL-92 标准,请使用 CAST 而不要使用CONVERT。如果要利用 CONVERT 中的样式功能,请使用 CONVERT 而不要使用CAST。 使用 CAST 或 CONVERT 时,需要两条信息: ?要转换的表达式(例如,销售报告要求销售数据从货币型数据转换为字符型数据)。 ?要将所给表达式转换到的数据类型,例如,varchar或 SQL Server 提供的任何其它数据类型。 除非将被转换的值存储起来,否则转换仅在 CAST 或 CONVERT 函数的作用期内有效。 在下面的示例中,第一个 SELECT 语句中使用 CAST,第二个 SELECT 语句中使用 CONVERT,将title列转换为char(50)列,以使结果更可读: USE pubs SELECT CAST(title AS char(50)), ytd_sales FROM titles WHERE type = 'trad_cook' 或 USE pubs SELECT CONVERT(char(50), title), ytd_sales FROM titles WHERE type = 'trad_cook' 下面是结果集:(对任何一个查询) ytd_sales ----------------------------------------- -----------

SQL大数据库期末大作业

学校:联合大学 系别:信息管理系 :超 学号:06 《餐饮业信息管理系统的开发》 1、本项目的需求分析 随着今年来中国餐饮行业的日益火爆,在强烈的行业竞争中,一个高效的餐饮信息管理系统的应用,无疑是至关重要的。高效,便捷的管理系统,不仅仅极大的方便了食客的就餐,同时对于餐饮公司的各项信息管理有着很大的帮助,同时,我们的餐饮信息管理系统还能帮助餐厅降低错误率,扩大营业围,增加知名度等。 为了使得系统在操作的过程中,更加便捷,具有针对性,本次系统设计主要分为:员工登陆操作信息系统,以及店主操作管理信息系统。不同的设计从而达到不同的功能,实现信息的有效传达与管理。 第一:在员工使用本餐饮信息管理系统应可以实现以下功能: 1.添加修改查询客户会员信息(修改客户信息需客户确认) 2.查询菜单 3.添加查询预定信息,为老顾客打折 4.客户可以在自己的会员账户里充值 5.顾客可以用现金买单也可以从会员账户里扣取 第二:管理员使用本餐饮信息管理系统应可以实现以下功能: 1.添加修改查询客户会员信息(修改客户信息需客户确认) 2.添加修改查询菜单信息,最好能看到菜品图片 3.添加查询预定信息,为老顾客打折 4.客户可以在自己的会员账户里充值 5.顾客可以用现金买单也可以从会员账户里扣取 6.设定具体的打折方法 7.添加职员信息,权限也可以定为管理员。 8.可以查询使用者的现金收款金额。 二、餐饮业管理数据库管理系统的E-R模型(概念结构设计) 1.用户(员工)的信息:

编号、密码、类型、、、收款金额 2.客户信息: 用户编号、客户编号、、、密码、开卡时间、卡余额 3.食谱: 类型、名称、价格、配料、照片 4.预定: 用户编号、日期、预定时间、客户、类型、预定食谱、桌号 5桌台管理: 桌号、使用情况、 6.点餐管理: 用户编号、类型、菜品、数量、价格、照片 7.盈利管理: 日期、日支出金额、店收入、外卖收入、盈利额度 各对象之间的联系图: 用户E-R图 主要存储一些用户信息,如用户的账号、密码和类型地点等等,主要用于用户登录,添加客户和添加预定时会使用到用户信息。

oracle 行转列sql

表结构和数据如下(表名Test): NO V ALUE NAME 1 a 测试1 1 b 测试2 1 c 测试3 1 d 测试4 2 e 测试5 4 f 测试6 4 g 测试7 Sql语句: select No, ltrim(max(sys_connect_by_path(Value, ';')), ';') as Value, ltrim(max(sys_connect_by_path(Name, ';')), ';') as Name from (select No, Value, Name, rnFirst, lead(rnFirst) over(partition by No order by rnFirst) rnNext from (select a.No, a.Value, https://www.doczj.com/doc/ba4125417.html,, row_number() over(order by a.No, a.V alue desc) rnFirst from Test a) tmpTable1) tmpTable2 start with rnNext is null connect by rnNext = prior rnFirst group by No; 检索结果如下: NO V ALUE NAME 1 a;b;c;d 测试1;测试2;测试3;测试4 2 e 测试5 4 f;g 测试6;测试7 简单解释一下那个Sql吧: 1、最内层的Sql(即表tmpTable1),按No和Value排序,并列出行号:select a.No, a.Value, https://www.doczj.com/doc/ba4125417.html,, row_number() over(order by a.No, a.V alue desc) rnFirst

SQL2008数据库大作业

数据库基础 ------大作业 题目:学生信息管理系统 教学系:数学与统计学院 专业班级: 071121 学生姓名: 8888

一、系统设计 在进行系统的详细设计之前,首先应该设计好系统的模式并确定好系统的功能目标和具体页面,下面就是学生信息管理的系统设计。 从系统的设计目标上来看,学生信息管理系统的主要功能如下:(1)登录验证功能。 (2)学生信息查看功能。 (3)信息编辑删除和添加功能。 (4)成绩查看和搜索功能。 (5)课程浏览搜索功能。 (6)密码修改功能。 从系统的实现上来看,共有十七个页面,每个页面的功能实现和说明如下所示。 页面说明

下面介绍在系统设计之前数据库的需求分析和设计。 二、数据库设计 1.需求分析 学生信息管理系统是各大高校所不可缺少的一部分,随着计算机水平的快速提高,学生信息管理系统也在不断地发展和完善。管理信息系统主要包括了学生的信息管理以及课程和成绩管理,基本上实现了管理系统所必须的功能,下面介绍学生信息管理系统数据库的设计。 2.概念设计 2.1数字词典 数据词典如下表所示:

数据词典

2.2E-R图 根据以上的需求分析,E-R图如图下图所示: E-R图如下 2.3关系模式 E-R图转换成关系模式如下: 学生(学号、姓名、性别、民族、出生年月、入学时间、班级、生源地、备注) 课程(课程号、课程名称、学时、学分、课程类型、授课老师) 成绩(ID、学号、课程号、考试成绩) 选修(学号、课程号、选修时间) 查询(学号、课程号、查询时间)

3.逻辑设计 根据前面的E-R图转换的关系模式一共有以下几个表: Student(学生表) Course(课程表) Score(成绩表) Elective(选修表)

T-SQL 经典行专列、列转行,分页及存储过程

T-SQL 经典编程 说明:本实例是以SQL Server 2005 为运行环境的。 准备工作:创建一个名为DB 的数据库(CREATE DATABASE DB)。 一、T-SQL 行转列 1、创建如下表 CREATE TABLE [Scores] ( [ID] INT IDENTITY(1,1),--自增标识 [StuNo] INT,--学号 [Subject] NVARCHAR(30),--科目 [Score] FLOAT--成绩 ) GO INSERT INTO [Scores] SELECT 100,'语文', 80 UNION SELECT 100,'数学', 75 UNION SELECT 100,'英语', 70 UNION SELECT 100,'生物', 85 UNION SELECT 101,'语文', 80 UNION SELECT 101,'数学', 90 UNION SELECT 101,'英语', 70 UNION SELECT 101,'生物', 85 CREATE TABLE [Student] ( [ID] INT IDENTITY(100,1),--自增标识,学号 [StuName] NVARCHAR(30),--姓名 [Sex] NVARCHAR(30),--性别 [Age] CHAR(2)--年龄) GO INSERT INTO [Student] SELECT'张三','男', 80 UNION SELECT'李四','女', 75 两表的数据如下图:

2、通过CASE…WHEN 语句和GROUP BY…聚合函数来实现行转列 SELECT StuNo AS'学号', MAX(CASE Subject WHEN'语文'THEN Score ELSE 0 END)AS'语文', MAX(CASE Subject WHEN'数学'THEN Score ELSE 0 END)AS'数学', MAX(CASE Subject WHEN'英语'THEN Score ELSE 0 END)AS'英语', MAX(CASE Subject WHEN'生物'THEN Score ELSE 0 END)AS'生物', SUM(Score)AS'总分', AVG(Score)AS'平均分' FROM dbo.[Scores] GROUP BY StuNo ORDER BY StuNo ASC 结果如下图: 3、通过JOIN…ON 实现两表联接,显示出学生姓名 SELECT MAX(StuNo)AS'学号', StuName AS'姓名', MAX(CASE Subject WHEN'语文'THEN Score ELSE 0 END)AS'语文', MAX(CASE Subject WHEN'数学'THEN Score ELSE 0 END)AS'数学', MAX(CASE Subject WHEN'英语'THEN Score ELSE 0 END)AS'英语', MAX(CASE Subject WHEN'生物'THEN Score ELSE 0 END)AS'生物', SUM(Score)AS'总分', AVG(Score)AS'平均分' FROM dbo.[Scores] A join [Student] B on(A.StuNo=B.ID)

SQL字符转换成数值类型

SQL的datetime类型数据转换为字符串格式大全SELECT CONVERT(varchar,getdate()) ,CONVERT(varchar,getdate(),0) as '0' ,CONVERT(varchar,getdate(),1) as '1' ,CONVERT(varchar,getdate(),2) as '2' ,CONVERT(varchar,getdate(),3) as '3' ,CONVERT(varchar,getdate(),4) as '4' ,CONVERT(varchar,getdate(),5) as '5' ,CONVERT(varchar,getdate(),6) as '6' ,CONVERT(varchar,getdate(),7) as '7' ,CONVERT(varchar,getdate(),8) as '8' ,CONVERT(varchar,getdate(),9) as '9' ,CONVERT(varchar,getdate(),10) as '10' ,CONVERT(varchar,getdate(),11) as '11' ,CONVERT(varchar,getdate(),12) as '12' ,CONVERT(varchar,getdate(),13) as '13' ,CONVERT(varchar,getdate(),14) as '14' ,CONVERT(varchar,getdate(),100) as '100' ,CONVERT(varchar,getdate(),105) as '105' ,CONVERT(varchar,getdate(),110) as '110' ,CONVERT(varchar,getdate(),111) as '111' ,CONVERT(varchar,getdate(),112) as '112'

SQLSERVER行转列和列转行

1:行转列 子查询,获取一定数据集结果 SELECT objid,action,count(1) AS [count] FROM T_MyAttention WHERE objid IN (SELECT TOP 10 objid FROM T_MyAttentiontma GROUP BY objid ORDER BY count(1) DESC) GROUP BY objid,action 下面用行转列语法获取最终结果 select * from ( SELECT objid,action,count(1) AS [count] FROM T_MyAttention WHERE objid IN (SELECT TOP 10 objid FROM T_MyAttentiontma GROUP BY objid ORDER BY count(1) DESC) GROUP BY objid,action ) t pivot ( sum(count) for t.action in ([1],[2],[3],[4])) as ourpivot

微软官方的图:

2:列转行 怎么把一条记录拆分成几条记录? User No. A B C 1 1 21 34 24 1 2 42 25 16 RESULT: User No. Type Num 1 1 A 21 1 1 B 34 1 1 C 24 1 2 A 42 1 2 B 25 1 2 C 16 declare @t table(usserint ,no int ,a int,bint, c int) insert into @t select 1,1,21,34,24 union all select 1,2,42,25,16

sqlserver行列转换

SQL Server中行列转换Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE 语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合函数(value_column) FOR pivot_column IN() ) UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现 完整语法: table_source UNPIVOT( value_column FOR pivot_column IN() )

注意:PIVOT、UNPIVOT是SQL Server 2005 的语法,使用需修改数据库兼容级别在数据库属性->选项->兼容级别改为 90 典型实例 一、行转列 1、建立表格 if object_id('tb')isnotnull droptable tb go createtable tb(姓名varchar(10),课程varchar(10),分数int) insertinto tb values('张三','语文',74) insertinto tb values('张三','数学',83) insertinto tb values('张三','物理',93) insertinto tb values('李四','语文',74) insertinto tb values('李四','数学',84) insertinto tb values('李四','物理',94) go select*from tb go 姓名课程分数 ---------- ---------- ----------- 张三语文 74

SqlServer普通行列转换

/* 标题:普通行列转换(version 2.0) 作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 时间:-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。

相关主题
文本预览
相关文档 最新文档