| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2654 人关注过本帖
标题:研究一下
只看楼主 加入收藏
西风独自凉
Rank: 8Rank: 8
等 级:贵宾
威 望:43
帖 子:3380
专家分:28
注 册: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-07 09:29
西风独自凉
Rank: 8Rank: 8
等 级:贵宾
威 望:43
帖 子:3380
专家分:28
注 册: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-07 10:05
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
收藏
得分:0 
[bo][un]西风独自凉[/un] 在 2008-11-7 09:29 的发言:[/bo]

建表﹕
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以上的版本 好象数据库本身就支持交叉表查询

[[it] 本帖最后由 happynight 于 2008-11-7 14:00 编辑 [/it]]
2008-11-07 13:59
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
收藏
得分:0 
[bo][un]西风独自凉[/un] 在 2008-11-7 10:05 的发言:[/bo]

建表﹕
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-07 14:03
西风独自凉
Rank: 8Rank: 8
等 级:贵宾
威 望:43
帖 子:3380
专家分:28
注 册:2007-8-2
收藏
得分:0 
[bo][un]happynight[/un] 在 2008-11-7 14:03 的发言:[/bo]


看不懂原始数据和最终结果之间有什么逻辑关系 详细说明下



得出日期最大和當前最大日期的最大qty   以第一列分組

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

2008-11-07 15:51
西风独自凉
Rank: 8Rank: 8
等 级:贵宾
威 望:43
帖 子:3380
专家分:28
注 册:2007-8-2
收藏
得分:0 
[bo][un]happynight[/un] 在 2008-11-7 13:59 的发言:[/bo]


很典型的交叉表问题 若使用的是2000的话
select * into #ls1 from (
select '鋁' as ScrapeType,'片材' as RawMType  ,23.00   as qty union all
select '鐵'    ,'片材',799.60    union all
select '鋁'     ...



數據一多﹐你還這樣寫﹖
這種方法不實用

2008-11-07 15:53
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
收藏
得分:0 
[bo][un]西风独自凉[/un] 在 2008-11-7 15:53 的发言:[/bo]




數據一多﹐你還這樣寫﹖
這種方法不實用


呵呵 有动态版
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)
-----
时间比较匆忙没调试

[[it] 本帖最后由 happynight 于 2008-11-7 17:29 编辑 [/it]]
2008-11-07 17:25
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
收藏
得分:0 
下班了 下个问题 回家慢慢研究
2008-11-07 17:27
西风独自凉
Rank: 8Rank: 8
等 级:贵宾
威 望:43
帖 子:3380
专家分:28
注 册: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-08 11:58
西风独自凉
Rank: 8Rank: 8
等 级:贵宾
威 望:43
帖 子:3380
专家分:28
注 册: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-08 12:02
快速回复:研究一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016004 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved