• 主页
  • 基础类
  • 应用实例
  • 新技术前沿

数据查询 行转列 问题求助

daview 2007-02-08 09:04:58
下面是我同事弄的一个脚本,不知道他从哪里弄的(反正他在这方面比我还垃圾,哈哈,而且他已经离职了),这个脚本目的是把行转为列,中间的“else”部分代码是我后来添加的,无论前后,该代码只有第一个数据成功转换了,其余的数据都没有转换。

Select ([Year]),
max(case Number when 1 then (SmallImageUrl) else ('defaultMag.jpg') end) as SmallImageUrl1,
max(case Number when 2 then (SmallImageUrl) else ('defaultMag.jpg') end) as SmallImageUrl2,
max(case Number when 3 then (SmallImageUrl) else ('defaultMag.jpg') end) as SmallImageUrl3,
max(case Number when 4 then (SmallImageUrl) else ('defaultMag.jpg') end) as SmallImageUrl4,
max(case Number when 1 then ('?ISBN=' + ISBN) else ('#') end) as ISBN1,
max(case Number when 2 then ('?ISBN=' + ISBN) else ('#') end) as ISBN2,
max(case Number when 3 then ('?ISBN=' + ISBN) else ('#') end) as ISBN3,
max(case Number when 4 then ('?ISBN=' + ISBN) else ('#') end) as ISBN4,
max(case Number when 1 then (IssueName) else ('(无杂志)') end) as IssueName1,
max(case Number when 2 then (IssueName) else ('(无杂志)') end) as IssueName2,
max(case Number when 3 then (IssueName) else ('(无杂志)') end) as IssueName3,
max(case Number when 4 then (IssueName) else ('(无杂志)') end) as IssueName4
From
MagazineIssue
Where OwnerEMNumber = @ISBN
group by [Year]
...全文
248 点赞 收藏 11
写回复
11 条回复
jacobsan 2007年02月08日
倒分?
回复 点赞
dawugui 2007年02月08日
呵呵,不客气.
回复 点赞
daview 2007年02月08日
谢谢各位哈。

非常感谢 dawugui !!!

是你的需求提醒了我,我试着创建一个表,提供模拟数据给你帮忙的,结果没有问题,仔细分析,原来是原来的数据表中NUMBER是一样的。(呵呵,这个数据的YEAR本身是我手工修改的,而且数据量不大)。

非常感谢。
回复 点赞
dawugui 2007年02月08日
我建议你给出表结构,数据和想要的结果.
回复 点赞
daview 2007年02月08日
问题没有解决。

我的数据中有IMAGEURL(varchar)、ISSUENAME(varchar)、NUMBER(int,值1-4)、ISBN(varchar)、YEAR(char)等字段,希望通过按YEAR进行统计,根据NUMBER的不同生成对应的IMAGEURL、ISSUENAME、ISBN字段。

我的代码本身没有问题,能正确得到NUMBER为最大的结果,但运行错误。

根据我的分析,问题应该在MAX这个聚合函数上,该函数取最大的,第一次取了最大的后,后面的不再运行了,把MAX更换为MIN后,得到另外一个结果。

问题:

是否有其他的聚合函数,支持以VARCHAR为参数的?或者自己如何编写一个聚合函数?
回复 点赞
wxh163000 2007年02月08日
HRHR
回复 点赞
jacobsan 2007年02月08日
是不是因为你的year字段都相同?改为group by [Year],[Month],类似这样试试
回复 点赞
hhhdyj 2007年02月08日
这样改试试看,不过要确保,SmallImageUrl和IssueName字段的第一个字符不为空格。
Select ([Year]),
ltrim(max(case Number when 1 then (SmallImageUrl) else (' defaultMag.jpg') end)) as SmallImageUrl1,
ltrim(max(case Number when 2 then (SmallImageUrl) else (' defaultMag.jpg') end)) as SmallImageUrl2,
ltrim(max(case Number when 3 then (SmallImageUrl) else (' defaultMag.jpg') end)) as SmallImageUrl3,
ltrim(max(case Number when 4 then (SmallImageUrl) else (' defaultMag.jpg') end)) as SmallImageUrl4,
ltrim(max(case Number when 1 then ('?ISBN=' + ISBN) else (' #') end)) as ISBN1,
ltrim(max(case Number when 2 then ('?ISBN=' + ISBN) else (' #') end)) as ISBN2,
ltrim(max(case Number when 3 then ('?ISBN=' + ISBN) else (' #') end)) as ISBN3,
ltrim(max(case Number when 4 then ('?ISBN=' + ISBN) else (' #') end)) as ISBN4,
ltrim(max(case Number when 1 then (IssueName) else (' (无杂志)') end)) as IssueName1,
ltrim(max(case Number when 2 then (IssueName) else (' (无杂志)') end)) as IssueName2,
ltrim(max(case Number when 3 then (IssueName) else (' (无杂志)') end)) as IssueName3,
ltrim(max(case Number when 4 then (IssueName) else (' (无杂志)') end)) as IssueName4
From
MagazineIssue
Where OwnerEMNumber = @ISBN
group by [Year]
回复 点赞
云中客 2007年02月08日
是哪个结果显示出来的
回复 点赞
w75251455 2007年02月08日
8嘎
回复 点赞
dawugui 2007年02月08日
确实错了.为何有3次等于1,2,3,4?
回复 点赞
发动态
发帖子
MS-SQL Server
创建于2007-09-28

1.4w+

社区成员

25.3w+

社区内容

MS-SQL Server相关内容讨论专区
社区公告
暂无公告