--悲哀:行转列还没出师,哪位大侠帮一下!--

luoyoumou 2009-11-27 11:09:50
表A,两个字段: CreateDate, Detail
---------------------------------------
CreateDate Detail
2009-11-26 00:00:00.000 (A3-5)
2009-11-26 00:00:00.000 (B3-2)
2009-11-27 00:00:00.000 (A3-3)
2009-11-27 00:00:00.000 (B3-1)
---------------变成---------------------
2009-11-26 00:00:00.000 (A3-5)#(B3-2)
2009-11-27 00:00:00.000 (A3-3)#(B3-1)


------------求救?---------------------
...全文
207 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
guguda2008 2009-11-30
  • 打赏
  • 举报
回复
顺序不对的话自己用ORDER BY排一下吧
guguda2008 2009-11-30
  • 打赏
  • 举报
回复
DECLARE @T TABLE (
[NAME] VARCHAR(50)
,[TYPE] VARCHAR(50)
,PRICE NUMERIC(19,2)
)
INSERT INTO @T
SELECT '诺基亚','N80', 1203 UNION ALL
SELECT '诺基亚','E90', 675 UNION ALL
SELECT '诺基亚','E61', 155 UNION ALL
SELECT '诺基亚','N73', 30 UNION ALL
SELECT '诺基亚','N7610', 10 UNION ALL
SELECT '索爱','K506', 8918 UNION ALL
SELECT '索爱','S700', 6489 UNION ALL
SELECT '索爱','W880', 1310 UNION ALL
SELECT '索爱','T238', 713 UNION ALL
SELECT '索爱','Z1010', 650 UNION ALL
SELECT '索爱','Z208', 394 UNION ALL
SELECT '索爱','P908', 146 UNION ALL
SELECT '索爱','V800', 58 UNION ALL
SELECT '索爱','K700c', 19 UNION ALL
SELECT '索爱','K300', 11 UNION ALL
SELECT '索爱','T68', 11 UNION ALL
SELECT '索爱','T628', 7
SELECT * FROM (
SELECT * FROM @T
UNION ALL
SELECT
CASE WHEN GROUPING([NAME])=1 THEN '总计' ELSE [NAME] END
,CASE WHEN GROUPING([TYPE])=1 THEN CASE WHEN GROUPING([NAME])=1 THEN '' ELSE '小计' END ELSE [TYPE] END
,SUM(PRICE) FROM @T
GROUP BY [NAME],[TYPE] WITH ROLLUP) T
ORDER BY [NAME]
/*
诺基亚 N80 1203.00
诺基亚 E90 675.00
诺基亚 E61 155.00
诺基亚 N73 30.00
诺基亚 N7610 10.00
诺基亚 E61 155.00
诺基亚 E90 675.00
诺基亚 N73 30.00
诺基亚 N7610 10.00
诺基亚 N80 1203.00
诺基亚 小计 2073.00
索爱 K300 11.00
索爱 K506 8918.00
索爱 K700c 19.00
索爱 P908 146.00
索爱 S700 6489.00
索爱 T238 713.00
索爱 T628 7.00
索爱 T68 11.00
索爱 V800 58.00
索爱 W880 1310.00
索爱 Z1010 650.00
索爱 Z208 394.00
索爱 小计 18726.00
索爱 K506 8918.00
索爱 S700 6489.00
索爱 W880 1310.00
索爱 T238 713.00
索爱 Z1010 650.00
索爱 Z208 394.00
索爱 P908 146.00
索爱 V800 58.00
索爱 K700c 19.00
索爱 K300 11.00
索爱 T68 11.00
索爱 T628 7.00
总计 20799.00
*/
guguda2008 2009-11-30
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 luoyoumou 的回复:]
SQL code---我现在的查询出来的结果如下:诺基亚 N801203
诺基亚 E90675
诺基亚 E61155
诺基亚 N7330
诺基亚 N761010
索爱 K5068918
索爱 S7006489
索爱 W8801310
索爱 T238713
索爱 Z1010650
索爱 Z208394
索爱 P908146
索爱 V80058
索爱 K700c19
索爱 K30011
索爱 T6811
索爱 T6287---------
--我现在想每类加个 小计: .. ..
--最后加个总计: .. ..
----------------------------------诺基亚 N801203
诺基亚 E90675
诺基亚 E61155
诺基亚 N7330
诺基亚 N761010
小计 ..2073
索爱 K5068918
索爱 S7006489
索爱 W8801310
索爱 T238713
索爱 Z1010650
索爱 Z208394
索爱 P908146
索爱 V80058
索爱 K700c19
索爱 K30011
索爱 T6811
索爱 T6287
小计 ..18726
总计 ..20799---------怎么实现啊?
[/Quote]
用ROOLUP
luoyoumou 2009-11-30
  • 打赏
  • 举报
回复
---我现在的查询出来的结果如下:
诺基亚 N80 1203
诺基亚 E90 675
诺基亚 E61 155
诺基亚 N73 30
诺基亚 N7610 10
索爱 K506 8918
索爱 S700 6489
索爱 W880 1310
索爱 T238 713
索爱 Z1010 650
索爱 Z208 394
索爱 P908 146
索爱 V800 58
索爱 K700c 19
索爱 K300 11
索爱 T68 11
索爱 T628 7

---------
--我现在想每类加个 小计: .. ..
--最后加个总计: .. ..
----------------------------------
诺基亚 N80 1203
诺基亚 E90 675
诺基亚 E61 155
诺基亚 N73 30
诺基亚 N7610 10
小计 .. 2073
索爱 K506 8918
索爱 S700 6489
索爱 W880 1310
索爱 T238 713
索爱 Z1010 650
索爱 Z208 394
索爱 P908 146
索爱 V800 58
索爱 K700c 19
索爱 K300 11
索爱 T68 11
索爱 T628 7
小计 .. 18726
总计 .. 20799


---------怎么实现啊?
luoyoumou 2009-11-30
  • 打赏
  • 举报
回复
---我现在的查询出来的结果如下:
诺基亚 N80 1203
诺基亚 E90 675
诺基亚 E61 155
诺基亚 N73 30
诺基亚 N7610 10
索爱 K506 8918
索爱 S700 6489
索爱 W880 1310
索爱 T238 713
索爱 Z1010 650
索爱 Z208 394
索爱 P908 146
索爱 V800 58
索爱 K700c 19
索爱 K300 11
索爱 T68 11
索爱 T628 7

---------
--我现在想每类加个 小计: .. ..
--最后加个总计: .. ..
----------------------------------
诺基亚 N80 1203
诺基亚 E90 675
诺基亚 E61 155
诺基亚 N73 30
诺基亚 N7610 10
小计 .. 2073
索爱 K506 8918
索爱 S700 6489
索爱 W880 1310
索爱 T238 713
索爱 Z1010 650
索爱 Z208 394
索爱 P908 146
索爱 V800 58
索爱 K700c 19
索爱 K300 11
索爱 T68 11
索爱 T628 7
小计 .. 18726
总计 .. 20799


---------怎么实现啊?
liherun 2009-11-30
  • 打赏
  • 举报
回复
来向高人学习
szpilmany 2009-11-30
  • 打赏
  • 举报
回复
以前我只会select @a+isnull(a,'') 。。。学习了
Mirana_NightShade 2009-11-27
  • 打赏
  • 举报
回复
学习
icelovey 2009-11-27
  • 打赏
  • 举报
回复
--小F-- 2009-11-27
  • 打赏
  • 举报
回复
字符串的合并 楼主加油
华夏小卒 2009-11-27
  • 打赏
  • 举报
回复
学习
qiqi860819 2009-11-27
  • 打赏
  • 举报
回复

create table a
(
CreateDate datetime,
Detail varchar(64)
)
go

insert into a
select '2009-11-26 00:00:00.000', '(A3-5)' union all
select '2009-11-26 00:00:00.000', '(B3-2)' union all
select '2009-11-27 00:00:00.000', '(A3-3)' union all
select '2009-11-27 00:00:00.000', '(B3-1)'
go



create FUNCTION dbo.f_str(@time datetime)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @r varchar(8000)
SET @r = ''
SELECT @r = @r + '#' + Detail
FROM a
WHERE CreateDate=@time
RETURN STUFF(@r, 1, 1, '')
END
GO
-- 调用函数

SELECt CreateDate, [values]=dbo.f_str(CreateDate)
FROM a
GROUP BY CreateDate
icelovey 2009-11-27
  • 打赏
  • 举报
回复
大家来学习~~
lg3605119 2009-11-27
  • 打赏
  • 举报
回复
小梁 开始授课啦...听课
feixianxxx 2009-11-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 liangck 的回复:]
静下心来.认真想想..以你的水平.我相信你可以写出来.
[/Quote]
一般帖子 P梁没这么多话的

看来楼主 深的P梁心 有前途
feixianxxx 2009-11-27
  • 打赏
  • 举报
回复
--2000函数
--2005 for xml path('')

--如果每组2条

/*
*************************************
* T-MAC 小编 *
* -->努力成长中 *
* -->梦想DBA *
*************************************
*/
if OBJECT_ID('tb') is not null
drop table tb
go
create table tb (CreateDate datetime , Detail varchar(10))
insert tb select
'2009-11-26 00:00:00.000' , '(A3-5)' union select
'2009-11-26 00:00:00.000' , '(B3-2)' union select
'2009-11-27 00:00:00.000' , '(A3-3)' union select
'2009-11-27 00:00:00.000' , '(B3-1)'
go
select CreateDate=CONVERT(varchar(10),CreateDate,120)
,Detail=MIN(detail)+'#'+Max(detail)
from tb
group by CreateDate
CreateDate Detail
---------- ---------------------
2009-11-26 (A3-5)#(B3-2)
2009-11-27 (A3-3)#(B3-1)
liangCK 2009-11-27
  • 打赏
  • 举报
回复
静下心来.认真想想..以你的水平.我相信你可以写出来.
nzperfect 2009-11-27
  • 打赏
  • 举报
回复
...
sgtzzc 2009-11-27
  • 打赏
  • 举报
回复
select 
CreateDate,
Detail=stuff((select '#'+detail from a where createdate=t.createdate for xml path('')),1,1,'')
from
a t
group by
createdate
快乐_石头 2009-11-27
  • 打赏
  • 举报
回复
SQL code问题描述:
无论是在sql 2000,还是在 sql 2005 中,都没有提供字符串的聚合函数,
所以,当我们在处理下列要求时,会比较麻烦:
有表tb, 如下:
id value
----- ------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
需要得到结果:
id values
------ -----------
1 aa,bb
2 aaa,bbb,ccc
即, group by id, 求 value 的和(字符串相加)

1. 旧的解决方法

-- 1. 创建处理函数
CREATE FUNCTION dbo.f_str(@id int)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @r varchar(8000)
SET @r = ''
SELECT @r = @r + ',' + value
FROM tb
WHERE id=@id
RETURN STUFF(@r, 1, 1, '')
END
GO
-- 调用函数

SELECt id, values=dbo.f_str(id)
FROM tb
GROUP BY id

-- 2. 新的解决方法
-- 示例数据
DECLARE @t TABLE(id int, value varchar(10))
INSERT @t SELECT 1, 'aa'
UNION ALL SELECT 1, 'bb'
UNION ALL SELECT 2, 'aaa'
UNION ALL SELECT 2, 'bbb'
UNION ALL SELECT 2, 'ccc'

-- 查询处理
SELECT *
FROM(
SELECT DISTINCT
id
FROM @t
)A
OUTER APPLY(
SELECT
[values]= STUFF(REPLACE(REPLACE(
(
SELECT value FROM @t N
WHERE id = A.id
FOR XML AUTO
), '<N value="', ','), '"/>', ''), 1, 1, '')
)N

/*--结果
id values
----------- ----------------
1 aa,bb
2 aaa,bbb,ccc
(2 行受影响)
--*/
加载更多回复(9)
毕业设计商城app源码 初衷 跳槽以后来到了新的公司,新的项目,每天朝九晚五,终于摆脱了以前朝九晚九的加班生活,谁说程序员就必须加班了,感觉自己作息也变得正常了起来。 空余出的大段时间拿来干什么呢?闲不住的小少年就想着自己做个啥,嗯,做个APP吧,毕竟PC已经是上个时代的事情了,人工智能AI、大数据啥的咱也不懂,又作为一只喜欢抢热点的全站攻城狮,就自己动手撸前后台代码搞一个APP吧,事装在手机里玩儿也可以装装逼嘛是吧。 说干就干,做个啥APP呢?又把我难住了,出师未捷身先死呀,人类的大部分行动都倒在了第一步,不行,必须想出来。嗯,突然想起来前一段时间有朋友找我想做一个煤炭物流APP,说你不是会写代码吗,给我搞一个APP呗,我流着泪在半夜12点回过去消息说,哥,我才下班,你看能行不。现在有时间了呀,煤炭+物流,符合地方特色,就这样定了。 然后就是蒙头撸代码,中间暂时省略10w字,反正一个月以后做完了。不瞎比比了,先上图再说。 二级页面就不做展示了,总之自我感觉还是肥肠的丰满啦(自信脸)。 技术准备 虽然任何开发的第一步都是可行性分析和设计,但是鉴于讲起来太庞杂,也不符合这次分享的主题,
-------------升级注意------------- 1、下载升级包后修改 update 文件夹内 admin 文件夹名,为自己的后台目录名称。(如果后台目录修改就不需要理会) 2、商业授权版本。(非商业用户升级数据损坏,官方不提供恢复) 3、后台关闭网站。 -------------升级方法------------- 1、下载升级包并修改 update 文件夹内 admin 文件夹名,为自己的后台目录名称。(如果后台目录修改就不需要理会) 2、后台关闭网站。 3、用二进制模式上传 update 文件夹内 所有文件覆盖到网站根目录内。 4、输入 http://您的网址/update.php 5、提示 更新完毕 升级完成。 -------------升级说明------------ 更改会员推广模式 因支付宝将原来我们的推广模式视为“传销”嫌疑,经沟通我们做以下调整。 将原来的推广模式改为 师徒模式,这个只是一个名称而已,站长如果有更好的 或喜欢的 可以自己修改。 流程与原来一样只是增加最高奖励限制。比如设置最高50元,师傅通过这个徒弟获取了50元之后那么你的徒弟就算出师了,之后就不能在获取了,师徒关系(推广与被推广的关系)解除。 -------------升级必做------------ 后台-网站设置 设置收徒佣金峰值 图片:1.jpg 常见问题: 1、我还想要以前那种方式行不行? 答:支付宝要求必须改掉。 2、原来的推广人如何处理? 答:不影响以前的,以前的推广超过设定值也关系,只针对升级后推广金额来限制。 多多返利 soft.duoduo123.com --2012年12月14日

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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