sqlserver列转行(sqlserver列转行,逗号分隔)

本篇文章给大家谈谈sqlserver列转行,以及sqlserver列转行,逗号分隔对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

SQLSERVER 列转行

第一:你的时间维度表基本没有意义,微软SSIS中心认为时间维度至少猛销由日期构成主键。可以认为是最小基本业务颗粒。

来个Sample,更复杂的在我空间里。但是道理是一样的。都是借助动态SQL和一些函数。

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

/*

作者:Edwin

数据库:SQL SERVER 2005+

作用:指定时间区间的自然周有几天,如果垮年度,由外围验证

Version 1.0

Copyright (c) 2015, SQL SERVER 2008

*/

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

/*参数设定区域,参数为开始时间和结束时间*/

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

declare @FDate DateTime set @FDate = '2014-09-01 00:00:00.000'

declare @Edate DateTime set @Edate = '2015-01-01 00:00:00.000'

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

/*SQL主体*/

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

declare @WeekHeader nvarchar(max)

select @WeekHeader = coalesce(@WeekHeader+',['+cast(WeekOfYear as varchar)+']','['+cast(WeekOfYear as varchar)+ ']')

from 

(

 select WeekOfYear from Comn.Calendar where DatePerDay=@FDate and DatePerDay@Edate group by WeekOfYear 

) M

declare @PivotSQL nvarchar(max) set @PivotSQL=N'

select

Year as 年份,'+@WeekHeader+'

from

(

    select [Year],WeekOfYear,DatePerDay from [DT_WareHouse].[Comn].[Calendar] where DatePerDay=@FDate and DatePerDay@Edate

) M

pivot

(

  count(DatePerDay) for [WeekOfYear] in('+@WeekHeader+')

) PVT'

exec sp_executesql @PivotSQL,N'@FDate datetime,@Edate datetime',@FDate,@Edate

执行结果:

在看一下时枝消游间维度表:

至于PVT标题别名问题,这个可以在时间维度表中创建字符串类型的第几周等样式的列来完成。

这种方式比较简单。

或是

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

/*

作者:Edwin

数据库:SQL SERVER 2005+

作用:指定时间区间的自然周销售,统计周期为某一桥吵年,如果垮年度,由外围验证

Version 1.0

Copyright (c) 2015, SQL SERVER 2008

*/

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

/*参数设定区域,参数为开始时间和结束时间*/

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

declare @FDate DateTime set @FDate = '2014-09-01 00:00:00.000'

declare @Edate DateTime set @Edate = '2015-01-01 00:00:00.000'

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

/*SQL主体*/

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

declare @WeekHeader nvarchar(max)

select @WeekHeader = coalesce(@WeekHeader+',['+cast(WeekOfYear as varchar)+']','['+cast(WeekOfYear as varchar)+ ']')

from 

(

 select ('第'+cast(WeekOfYear as varchar)+'周') as WeekOfYear from Comn.Calendar where DatePerDay=@FDate and DatePerDay@Edate group by WeekOfYear 

) M

declare @PivotSQL nvarchar(max) set @PivotSQL=N'

select

Year as 年份,'+@WeekHeader+'

from

(

select [Year],(''第''+cast(WeekOfYear as varchar)+''周'') as WeekOfYear,DatePerDay from [DT_WareHouse].[Comn].[Calendar] where DatePerDay=@FDate and DatePerDay@Edate

) M

pivot

(

  count(DatePerDay) for [WeekOfYear] in('+@WeekHeader+')

) PVT'

exec sp_executesql @PivotSQL,N'@FDate datetime,@Edate datetime',@FDate,@Edate

结果:

[img]

sqlserver列转行 查询

select * from A_14072201 

ID USERID

46859 38130

46859 888

46811 38130

46811 37761

46470 37836

46470 37836

46430 37836

46430 37836

select ID,USERID from A_14072201 

where ID in (select ID from (select ID,USERID from A_14072201 group by ID,USERID) as tableA group by ID having COUNT(*) = 2)

ID USERID

46859 38130

46859 888

46811 38130

46811 37761

select table1.ID,table1.USERID,table2.USERID 

from (select ID,USERID from (select ID,USERID,ROW_NUMBER() over (order by ID) 昌察罩ROWNUMBER from A_14072201 where ID in (select ID from (select ID,USERID from A_14072201 group by ID,USERID) as tableA group by ID having COUNT(*) = 2)) as tableB where ROWNUMBER % 2 = 1) table1 

inner join 

(select ID,USERID from A_14072201 where ID in (select ID from (select ID,USERID from A_14072201 group by ID,USERID) as tableA group by ID having COUNT(*) 没春= 2)) table2 

on table1.ID = table2.ID and table1.USERID  table2.USERID

ID USERID USERID

46811 38130 37761

46859 38130 888

--结果是对耐闹的,写的有点乱,你捋一捋然后优化一下,优化不了就直接改成表值函数去处理,我工作去了,话说你这个问题是半夜2:39发的,要注意身体啊。

怎么把SQLServer里边的表在WINFORM的dataGridView里横过来,菜鸟求高手指教

读取Sql里面的数据,添加到数据集,数据表

遍历数据表行的数据,添加到dataGridView1.Columns.Add 列中去

再遍历数据表中列名,添加到dataGridView1.Rows.Add 行

其实这样处理不是很好。

最好的方法还是在数据库中操作,进行行转列,列转行

希望下面的例子能给你帮组

其实就是行转列的问题 网上有很多的实例

问题:假设有张学生成绩表(tb)如下:

姓名 课程 分数

张三 语文 74

张三 数学 83

张三 物理 93

李四 语文 74

李四 数学 84

李四 物理 94

想变成(得到如下结果):

姓名 语棚宽文 数学 物理

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

李四 74 84 94

张三 74 83 93

答案:链返亮

if object_id('[tb]')is not null drop table tb;

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)

-- 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 姓名

-- 利用函数:pivot()世前SQL2005。

SELECT *

FROM tb PIVOT ( SUM(分数) FOR [课程] IN ( 语文, 数学, 物理) ) AS P

-- SQL SERVER 2000 动态SQL。

指课程不止语文、数学、物理这三门课程。(以下同、通用代码)

declare @sql varchar(8000)

set @sql = 'select 姓名'

select @sql = @sql + ' , max( case 课程 when ''' + 课程+ ''' then 分数 else 0 end) as [' + 课程+ ']'

from (select distinct 课程 from tb) as a

set @sql = @sql + ' from tb group by 姓名'

exec(@sql)

/*

姓名 数学物理语文

李四 84 94 74

张三 83 93 74*/

-- 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 课程

exec ('select * from (select * from tb) a pivot (max(分数) for 课程in (' + @sql + ')) b')

方法 2:

declare @s nvarchar(4000)

set @s=''

Select @s=@s+','+quotename([课程])+'=max(case when [课程]='+quotename([课程],'''')+' then [分数] end)'

from tb group by课程

exec('select '+@s+' from tb ')

sql 列转行

CREATE TABLE T1(A NUMBER,

b NUMBER,

c NUMBER,

d NUMBER,

e NUMBER);

insert into t1 values(1,2,3,4,5);

select * from t1;

select decode(A,1,'A',null) KEY ,decode(A,1,1,null) VALUE

from t1

union all

select decode(B,2,'B',null),decode(B,2,2,null)

from t1

union all

select decode(C,3,'C',null),decode(C,3,3,null)

from t1

union all

select decode(D,4,'D',null),decode(D,4,4,null)

from t1

union all

select decode(E,5,'E',null),decode(E,5,5,null)

from t1;

SqlServer 列转行

sql server 请参阅下面亩纯的代码,列转行

sqlserver列转行方法分享

以下例子适用 sqlserver 2005版本及岩耐侍以上

create table A ( info1 varchar(30),

  [2012] int,

  [2008] int,

  [2018] int,

  粗吵[2013] int

 )

 go

 

 insert into A values('A',8,null,null,20)

 insert into A values('B',null,7,null,3)

 insert into A values('C',12,4,null,null)

 insert into A values('D',null,null,5,16)

 go

 

 ---列行转换 适用于sql server 2005及以上版本

 SELECT info1,nian,qty

from A

unpivot(qty for nian in([2012],[2008],[2018],[2013]))as test

GO

   

truncate table A

drop table A

sqlserver如何列转行

CREATE TABLE #test (

  sn  INT,

  en  INT

);

INSERT INTO #test VALUES(1, 5);

INSERT INTO #test VALUES(6, 7);

INSERT INTO #test VALUES(8, 8);

INSERT INTO #test VALUES(9, 12);

go

SELECT DISTINCT

  m.number

FROM

  #test  t

    JOIN  master..spt_values  m

  ON(

    t.sn = m.number

AND t.en = m.number

  );

go

查询结果:

number

-----------

          1

         者如 2

    卜喊      3

         首弊启 4

          5

          6

          7

          8

          9

         10

         11

         12

(12 行受影响)

关于sqlserver列转行和sqlserver列转行,逗号分隔的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

相关阅读

  • mssqlserver(mssqlserver怎么安装)

    mssqlserver(mssqlserver怎么安装)

    简介:MSSQL Server是由微软公司开发的一种关系型数据库管理系统,是在Windows操作系统上运行的数据库服务器。它旨在提供可靠性、高性能和安全性,被广泛应用于企业级应用程序和网站开发中。多级标题:一、MSSQL Server的特点...

    2024.04.22 22:38:00作者:intanet.cnTags:mssqlserver
  • js转json(js转json在线)

    js转json(js转json在线)

    **简介**在IT技术领域中,JavaScript(简称JS)是一种常用的脚本语言,用于网页开发和编程。JSON(JavaScript Object Notation)则是一种轻量级的数据交换格式,常用于存储和传输数据。本文将讨论如何将Ja...

    2024.04.22 22:23:30作者:intanet.cnTags:js转json
  • 数据库有那些(数据库有哪些索引)

    数据库有那些(数据库有哪些索引)

    一、简介数据库是计算机中用于存储和管理数据的系统,是信息系统中最重要的组成部分之一。数据库技术在信息化时代发挥着重要作用,广泛应用于各行各业。数据库的种类有很多,每种都有其特点和适用场景。下面将介绍一些常见的数据库类型。二、关系数据库1....

    2024.04.22 22:14:00作者:intanet.cnTags:数据库有那些
  • 关于sparksqlsplit的信息

    关于sparksqlsplit的信息

    简介:作为一种基于内存的分布式数据处理框架,Spark SQL使得数据分析更加高效和灵活。而在Spark SQL中,split函数是非常常用的函数,用于将字符串通过指定的分隔符进行拆分。本文将详细介绍sparksqlsplit函数的用法和示...

    2024.04.22 22:13:30作者:intanet.cnTags:sparksqlsplit
  • 数据的处理方法(实验数据的处理方法)

    数据的处理方法(实验数据的处理方法)

    在当今数字化时代,数据处理变得越发重要。从企业管理到科研领域,人们需要处理大量的数据以获取有价值的信息。本文将介绍一些常见的数据处理方法,帮助读者更好地理解和应用数据处理技术。# 传统数据处理方法传统数据处理方法主要包括数据录入、数据清洗、...

    2024.04.22 22:09:30作者:intanet.cnTags:数据的处理方法
  • mongodb和hbase(mongodb和hbase性能)

    mongodb和hbase(mongodb和hbase性能)

    MongoDB和HBase是两种流行的NoSQL数据库系统,它们在处理大规模数据和高并发访问方面都有很好的表现。本文将对MongoDB和HBase进行比较和分析,以帮助读者了解它们各自的优缺点和适用场景。# 一、MongoDB介绍Mongo...

    2024.04.22 22:00:00作者:intanet.cnTags:mongodb和hbase
  • mysql转sqlserver(MySQL转sqlserver数据库)

    mysql转sqlserver(MySQL转sqlserver数据库)

    **简介**将MySQL数据库转移到SQL Server数据库是常见的需求,因为有时候企业需要更稳定、更强大的数据库管理系统来满足数据需求。在本文中,我们将详细讨论如何将MySQL数据库成功转移到SQL Server数据库。**准备工作**...

    2024.04.22 21:45:30作者:intanet.cnTags:mysql转sqlserver
  • 数据库的建立(数据库的建立与维护实验心得)

    数据库的建立(数据库的建立与维护实验心得)

    标题:数据库的建立简介:数据库是指在计算机系统中,用于存储和管理数据的系统。在IT技术领域,数据库起着至关重要的作用,它可以帮助我们更好地组织和管理数据,提高数据的访问效率和安全性。下面将详细介绍数据库的建立过程和相关知识。一、数据库类型1...

    2024.04.22 21:30:00作者:intanet.cnTags:数据库的建立