| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
学习型 ASP/PHP/ASP.NET 主机 35元/年全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
赛孚耐:软件保护加密专家身份认证令牌USB KEY虚拟主机 域名注册 主机托管 
共有 1034 人关注过本帖
标题:研究一下
收藏  推荐  打印 
本主题由 西风独自凉 于 2008-11-7 09:55 推荐主题
西风独自凉
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:43
帖子:3364
积分:31142
注册:2007-8-2
结帖率:100%
  问题点数:0  回复次数:12   
研究一下

建表﹕
select * into xx from (
select '鋁' as ScrapeType,'片材' as RawMType  ,23.00   as qty union all
select '鐵'    ,'片材',799.60    union all
select '鋁'    ,'料渣',16.20    union all
select '鋼'    ,'料渣',32.00    union all
select '鐵'    ,'料渣',105.00    union all
select '鋁'    ,'料頭',1.50    union all
select '鐵'    ,'料頭',16.40    union all
select '鐵'    ,'片材',10 )dd

根據上述建立的表寫出sql 得出下面的結果
結果顯示﹕

            銅    鐵    鋁    鋼    其它
片材    0    809.6    23    0    0    
料渣     0    105    16.2    32    0
料頭    0    16.4    1.5    0    0
其它    0    0    0    0    0
搜索更多相关主题的帖子: 研究一下  
2008-11-7 09:29
西风独自凉
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:43
帖子:3364
积分:31142
注册:2007-8-2
  得分:0 

建表﹕
select * into yy    from (select   1  as id  , 2008  as date ,  5   as qty  union all select 1,   2009 ,  4
         union all select 2 ,  2008 ,  5 union all select 2 ,  2009,   6 union all select 2 ,  2008,   7 union all select 2 ,  2009,  4 )  tt
根據上面所建立的表寫sql得出下面結果  :
id  date    qty
1   2009    4
2   2009    6

2008-11-7 10:05
happynight
Rank: 4
等级:高级会员
威望:6
帖子:459
积分:5035
注册:2008-4-26
  得分:0 

西风独自凉 在 2008-11-7 09:29 的发言:

建表﹕
select * into xx from (
select '鋁' as ScrapeType,'片材' as RawMType  ,23.00   as qty union all
select '鐵'    ,'片材',799.60    union all
select '鋁'    ,'料渣',16.20    union all
select '鋼'    ,'料渣' ...
很典型的交叉表问题 若使用的是2000的话
select * into #ls1 from (
select '鋁' as ScrapeType,'片材' as RawMType  ,23.00   as qty union all
select '鐵'    ,'片材',799.60    union all
select '鋁'    ,'料渣',16.20    union all
select '鋼'    ,'料渣',32.00    union all
select '鐵'    ,'料渣',105.00    union all
select '鋁'    ,'料頭',1.50    union all
select '鐵'    ,'料頭',16.40    union all
select '鐵'    ,'片材',10 )dd

            
SELECT * FROM #ls1
SELECT RawMType,SUM(CASE ScrapeType WHEN  '銅' THEN qty ELSE 0 END) AS 銅,
SUM(CASE ScrapeType WHEN  '鐵' THEN qty ELSE 0 END) AS 鐵,
SUM(CASE ScrapeType WHEN  '鋁' THEN qty ELSE 0 END) AS 鋁,
SUM(CASE ScrapeType WHEN  '鋼' THEN qty ELSE 0 END) AS 鋼
FROM #ls1 GROUP BY RawMType

若是2000以上的版本 好象数据库本身就支持交叉表查询

[ 本帖最后由 happynight 于 2008-11-7 14:00 编辑 ]
2008-11-7 13:59
happynight
Rank: 4
等级:高级会员
威望:6
帖子:459
积分:5035
注册:2008-4-26
  得分:0 

西风独自凉 在 2008-11-7 10:05 的发言:

建表﹕
select * into yy    from (select   1  as id  , 2008  as date ,  5   as qty  union all select 1,   2009 ,  4
         union all select 2 ,  2008 ,  5 union all select 2 ,  2009,   6 union all select ...
看不懂原始数据和最终结果之间有什么逻辑关系 详细说明下
2008-11-7 14:03
西风独自凉
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:43
帖子:3364
积分:31142
注册:2007-8-2
  得分:0 

happynight 在 2008-11-7 14:03 的发言:


看不懂原始数据和最终结果之间有什么逻辑关系 详细说明下
得出日期最大和當前最大日期的最大qty   以第一列分組

[ 本帖最后由 西风独自凉 于 2008-11-7 15:55 编辑 ]

2008-11-7 15:51
西风独自凉
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:43
帖子:3364
积分:31142
注册:2007-8-2
  得分:0 

happynight 在 2008-11-7 13:59 的发言:


很典型的交叉表问题 若使用的是2000的话
select * into #ls1 from (
select '鋁' as ScrapeType,'片材' as RawMType  ,23.00   as qty union all
select '鐵'    ,'片材',799.60    union all
select '鋁'     ...
數據一多﹐你還這樣寫﹖
這種方法不實用

2008-11-7 15:53
happynight
Rank: 4
等级:高级会员
威望:6
帖子:459
积分:5035
注册:2008-4-26
  得分:0 

西风独自凉 在 2008-11-7 15:53 的发言:




數據一多﹐你還這樣寫﹖
這種方法不實用
呵呵 有动态版
declare @sql varchar(8000)
set @sql=' '
select @sql=@sql + 'sum(case ScrapeType when'''+ ScrapeType +'''
            then qty else 0 end) as'''+ ScrapeType +''','
from(select distinct ScrapeType from #ls1) as a

select @sql=' SELECT RawMType  As 类别,'
            + @sql+ '  from #ls1  group by RawMType  '
exec(@sql)
-----
时间比较匆忙没调试

[ 本帖最后由 happynight 于 2008-11-7 17:29 编辑 ]
2008-11-7 17:25
happynight
Rank: 4
等级:高级会员
威望:6
帖子:459
积分:5035
注册:2008-4-26
  得分:0 

下班了 下个问题 回家慢慢研究
2008-11-7 17:27
西风独自凉
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:43
帖子:3364
积分:31142
注册:2007-8-2
  得分:0 

一樓答案﹕
第一種動態﹕
Declare @sql varChar(8000)
Set @sql = 'Select RawMType'
Select @sql = @sql + ',Sum(Case ScrapeType When ''' + rTrim(ScrapeType) + ''' Then Qty  End)' +rTrim(ScrapeType)+''
From (Select Distinct ScrapeType From xx) As A    
Select @sql = @sql+'  From xx  Group By RawMType'
Print @sql
Exec (@sql)

第二種(寫死了的)﹕
Select a.RawMType,Sum(Case a.ScrapeType When '銅' Then isnull(a.qty,0)  End)銅,
Sum(Case a.ScrapeType When '鐵' Then isnull(a.qty,0)  End)鐵,  
Sum(Case a.ScrapeType When '鋁' Then isnull(a.qty,0)  End)鋁 ,
Sum(Case a.ScrapeType When '鋼' Then isnull(a.qty,0)  End)鋼,
  Sum(Case a.ScrapeType When '其它' Then isnull(a.qty,0)  End)其它
From xx a    Group By RawMType

2008-11-8 11:58
西风独自凉
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:43
帖子:3364
积分:31142
注册:2007-8-2
  得分:0 

二樓答案﹕
Select xx.ID,xx.Date, max(xx.Qty) As Qty  From xx Inner Join (
Select ID,Max(Date) As Date From XX  Group By ID ) As A
on xx.ID=A.ID And xx.Date = A.Date Group By xx.ID,xx.Date

2008-11-8 12:02
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.061523 second(s), 10 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved