微软BI开拓者数据库专区SQL Server开发 帮我看看这个语句怎么写?谢谢

1  /  1  页   1 跳转 查看:3525

帮我看看这个语句怎么写?谢谢

帮我看看这个语句怎么写?谢谢

表a:Date,Code,Type,Name.表里数据如下所示:
1999-07-17 0:00:00    3    1    信达
1994-03-29 0:00:00    3    1    深圳蔚深
1993-02-27 0:00:00    3    1    深圳国际
1999-07-17 0:00:00    3    2    通商
1999-07-17 0:00:00    3    3    深圳中审
1999-07-17 0:00:00    3    3    广发华福
1999-07-17 0:00:00    3    3    湘财

Type为1时,是主销;为2时是分销;为3时是其他

我想要的结果是:

Code  主销  分销  其他

3      信达,深圳蔚深,深圳国际  通商    深圳中审,广发华福,湘财

请教一下怎么实现?
 

回复: 帮我看看这个语句怎么写?谢谢

--产生测试数据
create table a(Date datetime,Code int,Type int,Name varchar(50))
insert into a
select '1999-07-17 0:00:00',    3,    1,    '信达'
union all select '1994-03-29 0:00:00',    3,    1,    '深圳蔚深'
union all select '1993-02-27 0:00:00',    3,    1,    '深圳国际'
union all select '1999-07-17 0:00:00',    3,    2,  '通商'
union all select '1999-07-17 0:00:00',    3,    3,  '深圳中审'
union all select '1999-07-17 0:00:00',    3,    3,  '广发华福'
union all select '1999-07-17 0:00:00',    3,    3,  '湘财'

--解决方法,可以参见http://www.windbi.com/showtopic-962.aspx

with tb(code,type,name)
as(
    SELECT distinct code,type,STUFF((SELECT ',' + name AS [text()]
        FROM a N
        WHERE n.code = m.code and n.type=m.type       
        FOR XML PATH('')), 1, 1, '') as name
    FROM a m
)
select a.code,a.name as '主销',b.name as '分销',c.name as '其他' from tb a inner join tb b on a.code=b.code inner join tb c on a.code=c.code
where a.type=1 and b.type=2 and c.type=3

貌似性能上有些欠缺。
--------------------------------------------------------------------------------------------------
突然想起可以改用pivot来实现,具体如下:

with tb(code,type,name)
as(
    SELECT distinct code,type,STUFF((SELECT ',' + name AS [text()]
        FROM a N
        WHERE n.code = m.code and n.type=m.type     
        FOR XML PATH('')), 1, 1, '') as name
    FROM a m
)
SELECT code,[1] as 主销,[2] as 分销,[3] as 其他 FROM tb
PIVOT( max(name)  FOR type IN ([1],[2],[3])) AS pvt

性能应该有很大改进。
最后编辑拓狼 最后编辑于 2008-04-16 16:16:31
虽有智慧,不如乘势;虽有鎡基,不如待时。
君子学以聚之,问以辨之,宽以居之,仁以行之。
独学而无友,则孤陋而寡闻。
 

回复:帮我看看这个语句怎么写?谢谢

case when  或者用 decode都可以用嘛..
 

回复: 帮我看看这个语句怎么写?谢谢

,多谢!
 

回复:帮我看看这个语句怎么写?谢谢

还是pivot好
SQL Server技术交流群:71791281(有些问题在线解决或许会更快)

本群将从即日起严厉打击:刷屏、打广告、粘贴各种垃圾信息的ID,一经发现,马上删除。

希望通过我们的努力,能为大家打造一个健康有序的交流平台。
 

回复:帮我看看这个语句怎么写?谢谢

学习中
MSN群:group197007@msnzone.cn
 
1  /  1  页   1 跳转

版权所有 微软BI开拓者 

Powered by Discuz!NT 2.1.202    Copyright © 2001-2012 Comsenz Inc.
Processed in 0.3750096 second(s) , 3 queries.
返顶部