行转列

qq_34681482 2018-06-20 12:33:16
各位大神,这种查询是否可以实现!!Week17可以不需要显示出来,日期最好显示出来,星期几显不显示都行。下面是我设计的数据,可以做一些修改Plan列字段就是想要行转列的数据
...全文
235 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_34681482 2018-06-20
  • 打赏
  • 举报
回复
为什么星期会乱掉
qq_34681482 2018-06-20
  • 打赏
  • 举报
回复
为什么星期会乱掉
qq_34681482 2018-06-20
  • 打赏
  • 举报
回复
为什么星期会乱掉
听雨停了 2018-06-20
  • 打赏
  • 举报
回复
把DATENAME(weekday, [date]) AS dt 改成
cast(day([date]) AS VARCHAR(20)) AS dt
qq_34681482 2018-06-20
  • 打赏
  • 举报
回复
大神好啊,能不能把星期标题改成每一条数据的Date中的日期
听雨停了 2018-06-20
  • 打赏
  • 举报
回复

create table #WorkPlan
(ID varchar(50) primary key ,[Year] varchar(15),
[Week] varchar(15),[Date] datetime,
[ModelName] varchar(15),[Products] varchar(50),
[Output] varchar(15),[Person] varchar(15),
[Demand] varchar(15),[Manpower] varchar(15),
[Plan] int,[Version] varchar(15),
[Path] varchar(15))
insert #WorkPlan
select '1','2018', '1', '2018-01-01', 'IBG', 'EX6-4983-IECF_SEMI', '26400', '1', '5000', '2', 117, '1','' union all
select '2','2018', '1', '2018-01-02', 'IBG', 'EX6-4983-IECF_SEMI', '26400', '1', '5000', '2', 117, '1','' union all
select '3','2018', '1', '2018-01-03', 'IBG', 'EX6-4983-IECF_SEMI', '26400', '1', '5000', '2', 117, '1','' union all
select '4','2018', '1', '2018-01-04', 'IBG', 'EX6-4983-IECF_SEMI', '26400', '1', '5000', '2', 118, '1','' union all
select '5','2018', '1', '2018-01-05', 'IBG', 'EX6-4983-IECF_SEMI', '26400', '1', '5000', '2', 118, '1','' union all
select '6','2018', '1', '2018-01-06', 'IBG', 'EX6-4983-IECF_SEMI', '26400', '1', '5000', '2', 118, '1','' union all
select '7','2018', '1', '2018-01-07', 'IBG', 'EX6-4983-IECF_SEMI', '26400', '1', '5000', '2', 1, '1','' union all
select '8','2018', '1', '2018-01-01', 'IBG', 'EX6-5183-IECF_SEMI', '26400', '1', '5000', '2', 13, '1','' union all
select '9','2018', '1', '2018-01-02', 'IBG', 'EX6-5183-IECF_SEMI', '26400', '1', '5000', '2', 14, '1','' union all
select '10','2018', '1', '2018-01-3', 'IBG', 'EX6-5183-IECF_SEMI', '26400', '1', '5000', '2', 17, '1','' union all
select '11','2018', '1', '2018-01-4', 'IBG', 'EX6-5183-IECF_SEMI', '26400', '1', '5000', '2', 14, '1','' union all
select '12','2018', '1', '2018-01-5', 'IBG', 'EX6-5183-IECF_SEMI', '26400', '1', '5000', '2', 14, '1','' union all
select '13','2018', '1', '2018-01-6', 'IBG', 'EX6-5183-IECF_SEMI', '26400', '1', '5000', '2', 12, '1','' union all
select '14','2018', '1', '2018-01-7', 'IBG', 'EX6-5183-IECF_SEMI', '26400', '1', '5000', '2', 0, '1',''
--测试数据结束

SELECT [YEAR],
[week],
ModelName,
Products,
[OUTPUT],
Person,
Demand,
Manpower,
[PLAN],
SUM([plan]) OVER(
PARTITION BY [YEAR],
[week],
ModelName,
Products,
[OUTPUT],
Person,
Demand,
Manpower
) AS sum_total,
DATENAME(weekday, [date]) AS dt
INTO #tb
FROM #WorkPlan

DECLARE @name VARCHAR(max),@sql VARCHAR(max)
set @name =stuff((SELECT DISTINCT ',['+[dt]+']' from #tb for xml PATH('')),1,1,'')
PRINT @name
set @sql ='SELECT * from #tb pivot(max([plan])for dt in('+@name+'))a'
PRINT @sql
EXEC( @sql)


qq_34681482 2018-06-20
  • 打赏
  • 举报
回复
帖子数据有点错误,上面是表结构和想要查询输出的结果
qq_34681482 2018-06-20
  • 打赏
  • 举报
回复
create table WorkPlan (ID varchar(50) primary key ,[Year] varchar(15), [Week] varchar(15),[Date] datetime, [ModelName] varchar(15),[Products] varchar(50), [Output] varchar(15),[Person] varchar(15), [Demand] varchar(15),[Manpower] varchar(15), [Plan] int,[Version] varchar(15), [Path] varchar(15)) insert WorkPlan select '1','2018', '1', '2018-01-01', 'IBG', 'EX6-4983-IECF_SEMI', '26400', '1', '5000', '2', 117, '1','' union all select '2','2018', '1', '2018-01-02', 'IBG', 'EX6-4983-IECF_SEMI', '26400', '1', '5000', '2', 117, '1','' union all select '3','2018', '1', '2018-01-03', 'IBG', 'EX6-4983-IECF_SEMI', '26400', '1', '5000', '2', 117, '1','' union all select '4','2018', '1', '2018-01-04', 'IBG', 'EX6-4983-IECF_SEMI', '26400', '1', '5000', '2', 118, '1','' union all select '5','2018', '1', '2018-01-05', 'IBG', 'EX6-4983-IECF_SEMI', '26400', '1', '5000', '2', 118, '1','' union all select '6','2018', '1', '2018-01-06', 'IBG', 'EX6-4983-IECF_SEMI', '26400', '1', '5000', '2', 118, '1','' union all select '7','2018', '1', '2018-01-07', 'IBG', 'EX6-4983-IECF_SEMI', '26400', '1', '5000', '2', 1, '1','' union all select '8','2018', '1', '2018-01-01', 'IBG', 'EX6-5183-IECF_SEMI', '26400', '1', '5000', '2', 13, '1','' union all select '9','2018', '1', '2018-01-02', 'IBG', 'EX6-5183-IECF_SEMI', '26400', '1', '5000', '2', 14, '1','' union all select '10','2018', '1', '2018-01-3', 'IBG', 'EX6-5183-IECF_SEMI', '26400', '1', '5000', '2', 17, '1','' union all select '11','2018', '1', '2018-01-4', 'IBG', 'EX6-5183-IECF_SEMI', '26400', '1', '5000', '2', 14, '1','' union all select '12','2018', '1', '2018-01-5', 'IBG', 'EX6-5183-IECF_SEMI', '26400', '1', '5000', '2', 14, '1','' union all select '13','2018', '1', '2018-01-6', 'IBG', 'EX6-5183-IECF_SEMI', '26400', '1', '5000', '2', 12, '1','' union all select '14','2018', '1', '2018-01-7', 'IBG', 'EX6-5183-IECF_SEMI', '26400', '1', '5000', '2', 0, '1','' 输出结果 Year Week ModelName Products Output Person Demand Manpower 1-1 1-2 1-3 1-4 1-5 1-6 1-7 2018 1 IBG EX6-4983-IECF_SEMI 26400 1 5000 2 117 117 117 118 118 118 1 2018 2 IBG EX6-5183-IECF_SEMI 26400 1 5000 2 13 14 17 14 14 12 0
紫枫昵 2018-06-20
  • 打赏
  • 举报
回复
Select modelName,products, Sum(case when datepart(dw,Date)=1 then plan else 0 end as mon), Sum(case when datepart(dw,Date)=2 then plan else 0 end as tue), Sum(case when datepart(dw,Date)=3 then plan else 0 end as wed), Sum(case when datepart(dw,Date)=4 then plan else 0 end as thu), Sum(case when datepart(dw,Date)=5 then plan else 0 end as fri), Sum(case when datepart(dw,Date)=6 then plan else 0 end as sat), Sum(case when datepart(dw,Date)=7 then plan else 0 end as sun) from table group by modelName,products
shinger126 2018-06-20
  • 打赏
  • 举报
回复
你这是用EXCEL做报表么?我建议你用专业点的报表工具来做,FineReport或者水晶报表之类的都可以轻松实现
二月十六 2018-06-20
  • 打赏
  • 举报
回复
https://blog.csdn.net/sinat_28984567/article/details/79865046 建议楼主给出测试数据(别贴图),再写出测试数据对应的正确结果。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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