好贷网好贷款

怎么规定字段的显示位置 40a5918886]

发布时间:2016-12-4 1:53:52 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"怎么规定字段的显示位置 40a5918886]",主要涉及到怎么规定字段的显示位置 40a5918886]方面的内容,对于怎么规定字段的显示位置 40a5918886]感兴趣的同学可以参考一下。

   两张表表连接查询。出来的效果是        产品         掺配累积量         掺配比例          掺配精度    红丝           50               0.21               ss    绿丝            60              0.22               ss    怎么改成这种效果,各位大侠帮帮忙。    产品                  红丝              绿丝    掺配累积量            50                60    掺配比例              0.21              0.22    掺配精度              ss                ss    具体数据库脚本如下 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Infor]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[Infor]( [productId] [int] IDENTITY(1,1) NOT NULL, [productName] [nvarchar](5) NULL,  CONSTRAINT [PK_Infor] PRIMARY KEY CLUSTERED  ( [productId] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] END GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[test]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[test]( [产品ID] [int] NULL, [掺配累计量] [int] NULL, [掺配比例] [nvarchar](20) NULL, [掺配精度] [nvarchar](20) NULL ) ON [PRIMARY] END GO IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_test_Infor]') AND parent_object_id = OBJECT_ID(N'[dbo].[test]')) ALTER TABLE [dbo].[test]  WITH CHECK ADD  CONSTRAINT [FK_test_Infor] FOREIGN KEY([产品ID]) REFERENCES [dbo].[Infor] ([productId])

行列互换,精华里多

行转列

行转列、列转行

---------------------------------------------------------------------------- /* 表tb,数据如下: 项目种类  业绩  提成 洗吹类  200   10 外卖      100   5 合计      300   15 转换成: 项目种类  洗吹类  外卖  合计 业绩      200     100   300 提成      10      5     15 */ create table tb (   项目种类 varchar(10),   业绩     int,   提成     int ) insert into tb(项目种类,业绩,提成) values('洗吹类',200,10) insert into tb(项目种类,业绩,提成) values('外卖'  ,100,5) insert into tb(项目种类,业绩,提成) values('合计'  ,300,15) go select 项目种类,sum(洗吹类) as 洗吹类 , sum(外卖) as 外卖 , sum(合计) as 合计 from (   select 项目种类 = '业绩',          洗吹类   = case when 项目种类 = '洗吹类' then 业绩 else 0 end,          外卖     = case when 项目种类 = '外卖'   then 业绩 else 0 end,          合计     = case when 项目种类 = '合计'   then 业绩 else 0 end   from tb union all   select 项目种类 = '提成' ,          洗吹类   = case when 项目种类 = '洗吹类' then 提成 else 0 end,          外卖     = case when 项目种类 = '外卖'   then 提成 else 0 end,          合计     = case when 项目种类 = '合计'   then 提成 else 0 end   from tb ) m group by 项目种类 order by 项目种类 desc drop table tb /* 项目种类 洗吹类      外卖        合计           -------- ----------- ----------- -----------  业绩     200         100         300 提成     10          5           15 (所影响的行数为 2 行) */ -------------------------------------------------------------------------- /* 数据库中tb表格如下   月份    工资   福利  奖金 1月     100    200   300 2月     110    210   310 3月     120    220   320 4月     130    230   330 我想得到的结果是 项目   1月    2月  3月  4月 工资   100    110  120  130 福利   200    210  220  230 奖金   300    310  320  330 就是说完全把表格的行列颠倒,有点像那种旋转矩阵,请问如何用sql 语句实现? */ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_zj]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[p_zj] GO /*--行列互换的通用存储过程(原著:邹建):将指定的表,按指定的字段进行行列互换*/ create proc p_zj        @tbname sysname, --要处理的表名        @fdname sysname, --做为转换的列名        @new_fdname sysname='' --为转换后的列指定列名 as declare @s1 varchar(8000) , @s2 varchar(8000),         @s3 varchar(8000) , @s4 varchar(8000),         @s5 varchar(8000) , @i varchar(10) select @s1 = '' , @s2 = '' , @s3 = '' , @s4 = '' , @s5 = '' , @i = '0' select @s1 = @s1 + ',@' + @i + ' varchar(8000)',        @s2 = @s2 + ',@' + @i + '=''' + case isnull(@new_fdname , '') when '' then ''        else @new_fdname + '=' end + '''''' + name + '''''''',        @s3 = @s3 + 'select @' + @i + '=@' + @i + '+'',['' + [' + @fdname +         ']+'']=''+cast([' + name + '] as varchar) from [' + @tbname + ']',        @s4 = @s4 + ',@' + @i + '=''select ''+@' + @i,        @s5 = @s5 + '+'' union all ''+@' + @i,        @i=cast(@i as int)+1 from syscolumns where object_id(@tbname)=id and name<>@fdname select @s1=substring(@s1,2,8000),        @s2=substring(@s2,2,8000),        @s4=substring(@s4,2,8000),        @s5=substring(@s5,16,8000) exec('declare ' + @s1 + 'select ' + @s2 + @s3 + 'select ' + @s4 + ' exec(' + @s5 + ')') go --用上面的存储过程测试: create table Test(月份 varchar(4), 工资 int, 福利 int, 奖金 int) insert Test  select '1月',100,200,300 union all select '2月',110,210,310 union all select '3月',120,220,320 union all select '4月',130,230,330 go exec p_zj 'Test', '月份' , '项目' drop table Test drop proc p_zj /* 项目   1月         2月         3月         4月           ---- ----------- ----------- ----------- -----------  福利   200         210         220         230 工资   100         110         120         130 奖金   300         310         320         330 (所影响的行数为 3 行) */ /* 静态写法(SQL2005) */ --测试环境 create table Test(月份 varchar(4), 工资 int, 福利 int, 奖金 int) insert Test select '1月',100,200,300 union all select '2月',110,210,310 union all select '3月',120,220,320 union all select '4月',130,230,330 go --测试语句 SELECT * FROM  (   SELECT 考核月份,月份,金额 FROM       (SELECT 月份, 工资, 福利, 奖金 FROM Test) p   UNPIVOT      (金额 FOR 考核月份 IN (工资, 福利, 奖金))AS unpvt ) T PIVOT (MAX(金额)  FOR 月份 in ([1月],[2月],[3月],[4月]))AS pt --测试结果 /* 考核月份  1月     2月      3月     4月 -------  -----  -----   ------  ------- 福利200210220230 工资100110120130 奖金300310320330 */ --删除环境 Drop table Test

参考着写一下吧 晕死  还发3个帖子

学习了

葱白~小F

引用 7 楼 yhtapmys 的回复:葱白~小F up

引用 4 楼 fredrickhu 的回复:SQL code ---------------------------------------------------------------------------- /* 表tb,数据如下: 项目种类  业绩  提成 洗吹类  200   10 外卖      100   5 合计      300   15 转换成: 项目种类  洗吹类  外卖  合计 业绩      ……   很详细,谢谢了!

上一篇:用JDBC连接sql server 2005出现“无法打开登录 'XXX' 中请求的数据库。登录失败。” 30greencat123]
下一篇:数据库获得值 40huandfly]

相关文章

相关评论