刚才的贴大家说看不懂,现在重发,只能用SELECT语句实现

Leedsema 2009-12-08 05:11:44
[size=10px]OK

数据
StartDate MoCode MDeptCode iQty
2009-12-01 MO20090001 2001 1000
2009-12-01 MO20090002 2002 500
2009-12-01 MO20090003 2002 500
2009-12-02 MO20090004 2001 1000
2009-12-02 MO20090005 2002 500
2009-12-02 MO20090006 2002 500
2009-12-02 MO20090007 2003 1000


要得到的结果是
Month Date A B C
12 2009-12-01 MO20090001(1000) MO20090002(500)/MO20090003(500) NULL
12 2009-12-01 MO20090004(1000) MO20090005(500)/MO20090006(500) MO20090007(1000)

如何实现??
...全文
158 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
happyflvstone 2009-12-08
  • 打赏
  • 举报
回复
时间不巧,快下班了,玩完找好早点回家,下雨,有点冷


你的问题有点复杂,好好请教小F是有答案的,动态的不过复杂点罢了

收回爱新觉罗氏所说的系统标的说法,那是解决不了的
wufenq4552 2009-12-08
  • 打赏
  • 举报
回复
玩账号中......

你的问题看来要用函数
csdyyr 2009-12-08
  • 打赏
  • 举报
回复
呵呵,很久没见冒牌了。
bancxc 2009-12-08
  • 打赏
  • 举报
回复
说说你的规则吧
herv2002 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 leedsema 的回复:]
ABCDEFG七列是可以固定的,我只拿出了三列做个演示.感谢爱新觉罗氏的更正,下辈子我请你再做咱大清江山的皇帝.是行转列的问题,关键是现在前台报表程序限制了,只能用SQL SELECT语句实现这个报表,NND,烦得想去跳楼了,
[/Quote]
这个爱新觉罗氏是冒牌的

11楼:看来当时没看清楚,为什么是
Month Date A B C
12 2009-12-01 MO20090001(1000) MO20090002(500)/MO20090003(500) NULL
12 2009-12-02 MO20090004(1000) MO20090005(500)/MO20090006(500) MO20090007(1000)
不是
Month Date A B C D
12 2009-12-01 MO20090001(1000) MO20090002(500) MO20090003(500) NULL
12 2009-12-02 MO20090004(1000) MO20090005(500) MO20090006(500) MO20090007(1000)

难道还要根据数量凑足1000?那原始数据凑不了怎么办
「已注销」 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jiangshun 的回复:]
引用 8 楼 leedsema 的回复:
ABCDEFG七列是可以固定的,我只拿出了三列做个演示.感谢爱新觉罗氏的更正,下辈子我请你再做咱大清江山的皇帝.是行转列的问题,关键是现在前台报表程序限制了,只能用SQL SELECT语句实现这个报表,NND,烦得想去跳楼了,


三列的会难倒七列的就不会吗?
我估计你是不是中间那个相同的用"/"连在一起的不好处理?还是哪有困难?
要是那不好处理就另外多写个方法
[/Quote]

三列的不会啊,我只是发上结果来,结果是我手工打上来的,大哥!
不如你给我搞个三列的出来,我请你吃湘菜去,我在深圳
--小F-- 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 leedsema 的回复:]
七楼的等于没有回答,我要是这点都不会,我还会在CSDN里提问么?我早就回家看书去了,
[/Quote]

强人 等你的答案
jiangshun 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 leedsema 的回复:]
ABCDEFG七列是可以固定的,我只拿出了三列做个演示.感谢爱新觉罗氏的更正,下辈子我请你再做咱大清江山的皇帝.是行转列的问题,关键是现在前台报表程序限制了,只能用SQL SELECT语句实现这个报表,NND,烦得想去跳楼了,
[/Quote]

三列的会难倒七列的就不会吗?
我估计你是不是中间那个相同的用"/"连在一起的不好处理?还是哪有困难?
要是那不好处理就另外多写个方法
「已注销」 2009-12-08
  • 打赏
  • 举报
回复
用友U870的一个报表程序,我不用UAP报表,就行用友每个模块里自带的那个报表
「已注销」 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dawuguj 的回复:]
找个有序号的系统表可以select 出来

更正下

要得到的结果是
Month Date  A                      B                              C
12  2009-12-01  MO20090001(1000) MO20090002(500)/MO20090003(500)  NULL
12  2009-12-02  MO20090004(1000) MO20090005(500)/MO20090006(500)  MO20090007(1000)





[/Quote]

愿闻其详啊,
rt999xiaodi 2009-12-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 leedsema 的回复:]
ABCDEFG七列是可以固定的,我只拿出了三列做个演示.感谢爱新觉罗氏的更正,下辈子我请你再做咱大清江山的皇帝.是行转列的问题,关键是现在前台报表程序限制了,只能用SQL SELECT语句实现这个报表,NND,烦得想去跳楼了,
[/Quote]
你是什么报表工具
「已注销」 2009-12-08
  • 打赏
  • 举报
回复
七楼的等于没有回答,我要是这点都不会,我还会在CSDN里提问么?我早就回家看书去了,
「已注销」 2009-12-08
  • 打赏
  • 举报
回复
ABCDEFG七列是可以固定的,我只拿出了三列做个演示.感谢爱新觉罗氏的更正,下辈子我请你再做咱大清江山的皇帝.是行转列的问题,关键是现在前台报表程序限制了,只能用SQL SELECT语句实现这个报表,NND,烦得想去跳楼了,
--小F-- 2009-12-08
  • 打赏
  • 举报
回复
--这样?
----------------------------------------------------------------
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-12-08 17:15:32
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([StartDate] datetime,[MoCode] varchar(20),[MDeptCode] int,[iQty] int)
insert [tb]
select '2009-12-01','MO20090001',2001,1000 union all
select '2009-12-01','MO20090002',2002,500 union all
select '2009-12-01','MO20090003',2002,500 union all
select '2009-12-02','MO20090004',2001,1000 union all
select '2009-12-02','MO20090005',2002,500 union all
select '2009-12-02','MO20090006',2002,500 union all
select '2009-12-02','MO20090007',2003,1000
--------------开始查询--------------------------
select
month(StartDate) as [month],
convert(varchar(10),StartDate,120) as Date,
max(case MDeptCode when 2001 then MoCode+'('+ltrim(MDeptCode)+')' else '' end) as a,
max(case MDeptCode when 2002 then MoCode+'('+ltrim(MDeptCode)+')' else '' end) as b,
max(case MDeptCode when 2003 then MoCode+'('+ltrim(MDeptCode)+')' else '' end) as c
from
tb
group by
month(StartDate),convert(varchar(10),StartDate,120)
----------------结果----------------------------
/* month Date a b c
----------- ---------- ---------------------------------- ---------------------------------- ----------------------------------
12 2009-12-01 MO20090001(2001) MO20090003(2002)
12 2009-12-02 MO20090004(2001) MO20090006(2002) MO20090007(2003)

(2 行受影响)

*/
jiangshun 2009-12-08
  • 打赏
  • 举报
回复
表中iQty列只有500,100 吗?
或者只要A,B,C三列吗?
xuam 2009-12-08
  • 打赏
  • 举报
回复
应该是:
Month Date A B C
12 2009-12-01 MO20090001(1000) MO20090002(500)/MO20090003(500) NULL
12 2009-12-02 MO20090004(1000) MO20090005(500)/MO20090006(500) MO20090007(1000)


吧?
dawuguj 2009-12-08
  • 打赏
  • 举报
回复
找个有序号的系统表可以select 出来

更正下

要得到的结果是
Month Date A B C
12 2009-12-01 MO20090001(1000) MO20090002(500)/MO20090003(500) NULL
12 2009-12-02 MO20090004(1000) MO20090005(500)/MO20090006(500) MO20090007(1000)



dawuguj 2009-12-08
  • 打赏
  • 举报
回复
找个有序号的系统表可以select 出来

更正下

要得到的结果是
Month Date A B C
12 2009-12-01 MO20090001(1000) MO20090002(500)/MO20090003(500) NULL
12 2009-12-02 MO20090004(1000) MO20090005(500)/MO20090006(500) MO20090007(1000)



--小F-- 2009-12-08
  • 打赏
  • 举报
回复
行转列
xuam 2009-12-08
  • 打赏
  • 举报
回复
还是没看懂!

22,207

社区成员

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

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