sql 语句 列倒转 90度

laty_cathy 2010-09-07 03:20:55
大家好:
现有一个表a,存放的内容如下。
品号 日期 数量
T001 2010-01-01 100

T001 2010-01-02 200

T001 2010-01-03 300
如何用SQL查询出成成为以下格式
品号 2010-01-01 2010-01-02 2010-01-03
T001 100 200 300

thanks
...全文
148 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
claro 2010-09-07
  • 打赏
  • 举报
回复
标题很个性,不错。

看楼上的。
喜-喜 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 happycell188 的回复:]
SQL code
use test
go
if object_id('test.dbo.tb') is not null drop table tb
-- 创建数据表
create table tb
(
品号 char(5),
日期 datetime,
数量 int
)
go
--插入测试数据
insert into tb select 'T001','2010-01-0……
[/Quote]

应该是这样哈!呵呵...

use test
go
if object_id('test.dbo.tb') is not null drop table tb
-- 创建数据表
create table tb
(
品号 char(5),
日期 datetime,
数量 int
)
go
--插入测试数据
insert into tb select 'T001','2010-01-01',100
union all select 'T001','2010-01-02',200
union all select 'T001','2010-01-03',300
union all select 'T002','2010-01-02',200
union all select 'T002','2010-01-03',300
go
--代码实现

declare @sql varchar(max)
select @sql=isnull(@sql+',[','[')+convert(varchar(10),日期,120)+']' from(select distinct 日期 from tb)a

exec('select 品号,'+@sql+'
from (
select tt.品号,tt.日期,数量=isnull(t.数量,0)
from tb t right join (
select * from (select distinct 日期 from tb)a,(select distinct 品号 from tb)b
)tt
on t.品号=tt.品号 and t.日期=tt.日期
)t
pivot(sum(数量) for 日期 in('+@sql+'))pvt')

/*测试结果

品号 2010-01-01 2010-01-02 2010-01-03
------------------------------------------
T001 100 200 300
T002 0 200 300

(2 行受影响)
*/
喜-喜 2010-09-07
  • 打赏
  • 举报
回复
use test
go
if object_id('test.dbo.tb') is not null drop table tb
-- 创建数据表
create table tb
(
品号 char(5),
日期 datetime,
数量 int
)
go
--插入测试数据
insert into tb select 'T001','2010-01-01',100
union all select 'T001','2010-01-02',200
union all select 'T001','2010-01-03',300
union all select 'T002','2010-01-02',200
union all select 'T002','2010-01-03',300
go
--代码实现

declare @sql varchar(max)
select @sql=isnull(@sql+',[','[')+convert(varchar(10),日期,120)+']' from(select distinct 日期 from tb)a

select 品号,[2010-01-01],[2010-01-02],[2010-01-03]
from (
select tt.品号,tt.日期,数量=isnull(t.数量,0)
from tb t right join (
select * from (select distinct 日期 from tb)a,(select distinct 品号 from tb)b
)tt
on t.品号=tt.品号 and t.日期=tt.日期
)t
pivot(sum(数量) for 日期 in([2010-01-01],[2010-01-02],[2010-01-03]))pvt

/*测试结果

品号 2010-01-01 2010-01-02 2010-01-03
--------------------------------------------
T001 100 200 300
T002 0 200 300

(2 行受影响)
*/
winstonbonaparte 2010-09-07
  • 打赏
  • 举报
回复
行轉列的例子這裏太多了,你搜索一下吧

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧