100分请教一个列变行的问题,急等,请各位大虾帮帮忙

黑夜中最亮的星是菩提 2015-07-30 02:43:06
建个表 ,输入形式是:
舱口 关单号 日期 完成数 累计数
1 201501 24日 18:00-24:00 200 200
201501 25日 24:00-08:00 265 465
201501 25日 08:00-18:00 300 765

要求显示的形式是:
舱口 关单号 日期 完成数 累计数 日期 完成数 累计数 日期 完成数 累计数
1 201501 24日 18:00-24:00 200 200 25日 24:00-08:00 265 465 25日 08:00-18:00 300 765

例子有点变形,上了图,其中日期是不固定的,做多少天就写多少天

...全文
112 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 6 楼 Landa_Alice 的回复:
[quote=引用 3 楼 Landa_Alice 的回复:]

CREATE TABLE #1 (
ID INT,
Seat INT,
dates VARCHAR(30),
Qty INT,
SumQty INT	

)
INSERT INTO #1
SELECT  1 ,  201501,    '24日  18:00-24:00',      200 ,         200 union all
select   1,201501  ,           '25日 24:00-08:00',         265,  465 union all
SELECT 1, 201501,             '25日 08:00-18:00',       300 ,                765

DECLARE @a varchar(max)

SELECT @a='select ID,Seat '
SELECT @a=@a+
		','+QUOTENAME('日期')+N'=max(CASE dates WHEN '+QUOTENAME(dates,N'''')+N' THEN dates END)'+
		','+QUOTENAME('完成数量')+N'=sum(CASE dates WHEN '+QUOTENAME(dates,N'''')+N' THEN Qty END)'+
		','+QUOTENAME('累计数量')+N'=sum(CASE dates WHEN '+QUOTENAME(dates,N'''')+N' THEN SumQty END)'
FROM #1
GROUP BY dates
exec(@a+N'
FROM #1
GROUP BY ID,Seat')

你说的输入形式是表存的数据,知道吗,我把你的数据给造出来了,你现在只需要做的就是将我代码中的表名称替换成你数据库里的表名称就行了,懂了没有 [/quote] 我测试下啊,谢谢你!
Pact_Alice 2015-07-30
  • 打赏
  • 举报
回复
引用 3 楼 Landa_Alice 的回复:

CREATE TABLE #1 (
ID INT,
Seat INT,
dates VARCHAR(30),
Qty INT,
SumQty INT	

)
INSERT INTO #1
SELECT  1 ,  201501,    '24日  18:00-24:00',      200 ,         200 union all
select   1,201501  ,           '25日 24:00-08:00',         265,  465 union all
SELECT 1, 201501,             '25日 08:00-18:00',       300 ,                765

DECLARE @a varchar(max)

SELECT @a='select ID,Seat '
SELECT @a=@a+
		','+QUOTENAME('日期')+N'=max(CASE dates WHEN '+QUOTENAME(dates,N'''')+N' THEN dates END)'+
		','+QUOTENAME('完成数量')+N'=sum(CASE dates WHEN '+QUOTENAME(dates,N'''')+N' THEN Qty END)'+
		','+QUOTENAME('累计数量')+N'=sum(CASE dates WHEN '+QUOTENAME(dates,N'''')+N' THEN SumQty END)'
FROM #1
GROUP BY dates
exec(@a+N'
FROM #1
GROUP BY ID,Seat')

你说的输入形式是表存的数据,知道吗,我把你的数据给造出来了,你现在只需要做的就是将我代码中的表名称替换成你数据库里的表名称就行了,懂了没有
许晨旭 2015-07-30
  • 打赏
  • 举报
回复
引用 4 楼 deluxtx 的回复:
楼上得高人,我没说清楚一个问题。输入形式不需要,我只需要显示形式
什么意思?
  • 打赏
  • 举报
回复
楼上得高人,我没说清楚一个问题。输入形式不需要,我只需要显示形式
Pact_Alice 2015-07-30
  • 打赏
  • 举报
回复

CREATE TABLE #1 (
ID INT,
Seat INT,
dates VARCHAR(30),
Qty INT,
SumQty INT	

)
INSERT INTO #1
SELECT  1 ,  201501,    '24日  18:00-24:00',      200 ,         200 union all
select   1,201501  ,           '25日 24:00-08:00',         265,  465 union all
SELECT 1, 201501,             '25日 08:00-18:00',       300 ,                765

DECLARE @a varchar(max)

SELECT @a='select ID,Seat '
SELECT @a=@a+
		','+QUOTENAME('日期')+N'=max(CASE dates WHEN '+QUOTENAME(dates,N'''')+N' THEN dates END)'+
		','+QUOTENAME('完成数量')+N'=sum(CASE dates WHEN '+QUOTENAME(dates,N'''')+N' THEN Qty END)'+
		','+QUOTENAME('累计数量')+N'=sum(CASE dates WHEN '+QUOTENAME(dates,N'''')+N' THEN SumQty END)'
FROM #1
GROUP BY dates
exec(@a+N'
FROM #1
GROUP BY ID,Seat')

Pact_Alice 2015-07-30
  • 打赏
  • 举报
回复
CREATE TABLE #1 ( ID INT, Seat INT, dates VARCHAR(30), Qty INT, SumQty INT ) INSERT INTO #1 SELECT 1 , 201501, '24日 18:00-24:00', 200 , 200 union all select 1,201501 , '25日 24:00-08:00', 265, 465 union all SELECT 1, 201501, '25日 08:00-18:00', 300 , 765 DECLARE @a varchar(max) SELECT @a='select ID,Seat ' SELECT @a=@a+','+QUOTENAME('完成数量')+N'=sum(CASE dates WHEN '+QUOTENAME(dates,N'''') +N' THEN Qty END)'+ ','+QUOTENAME('总数量')+N'=sum(CASE dates WHEN '+QUOTENAME(dates,N'''') +N' THEN SumQty END)'+ ','+QUOTENAME('日期')+N'=max(CASE dates WHEN '+QUOTENAME(dates,N'''') +N' THEN dates END)' FROM #1 exec(@a+N' FROM #1 GROUP BY ID,Seat')
  • 打赏
  • 举报
回复
第一个是输入形式,第二个是现实形式

27,580

社区成员

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

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