标题:关于交叉查询的细节
只看楼主
中国龙王
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:484
专家分:283
注 册:2006-5-17
结帖率:97.22%
已结贴  问题点数:20 回复次数:7 
关于交叉查询的细节
前几天发的交叉查询的回复不是很理想。现在得细说一下:
表A:
款号    颜色    码尺    数量
6810    子色    M        60
6810    子色    L        60
6810    子色    XL       60
6810    子色    XXL      60
6810    子色    XXXL     60
6810    兰色    M        60
6810    兰色    L        60
6810    兰色    XL       60

表B:(表结构是固定的这几个字段)
款号    颜色    M    L    XL    XXL    XXXL
6810    子色    60   60   60    60     60
6810    兰色    60   60   60

由表A到表B以及由表B到表A的转换要怎么来实现呀
前面的用交叉不能带上颜色字段。所还不是很理想
搜索更多相关主题的帖子: 细节 交叉 查询 
2010-08-11 14:54
中国龙王
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:484
专家分:283
注 册:2006-5-17
得分:0 
我自己现在用的下面代码。兄弟们看一下有什么改进:
SELECT 款号,颜色,数量 as M FROM a WHERE 码尺='M' INTO CURSOR a1
SELECT 款号,颜色,数量 as L FROM a WHERE 码尺='L' INTO CURSOR a2
SELECT 款号,颜色,数量 as XL FROM a WHERE 码尺='XL' INTO CURSOR a3
SELECT 款号,颜色,数量 as XXL FROM a WHERE 码尺='XXL' INTO CURSOR a4
SELECT 款号,颜色,数量 as XXXL FROM a WHERE 码尺='XXXL' INTO CURSOR a5
SELECT NVL(a1.款号,a2.款号) 款号,NVL(a1.颜色,a2.颜色) 颜色,NVL(a1.M,000000) M,NVL(a2.L,000000) L FROM ;
    a1 FULL JOIN a2 ON a1.款号=a2.款号 AND a1.颜色=a2.颜色 INTO CURSOR b1
SELECT NVL(b1.款号,a3.款号) 款号,NVL(b1.颜色,a3.颜色) 颜色,NVL(b1.M,000000) M,NVL(b1.L,000000) L,NVL(a3.XL,000000) XL FROM ;
    b1 FULL JOIN a3 ON b1.款号=a3.款号 AND b1.颜色=a3.颜色 INTO CURSOR b1
SELECT NVL(b1.款号,a4.款号) 款号,NVL(b1.颜色,a4.颜色) 颜色,NVL(b1.M,000000) M,NVL(b1.L,000000) L,NVL(b1.XL,000000) XL,NVL(a4.XXL,000000) XXL FROM ;
    b1 FULL JOIN a4 ON b1.款号=a4.款号 AND b1.颜色=a4.颜色 INTO CURSOR b1
SELECT NVL(b1.款号,a5.款号) 款号,NVL(b1.颜色,a5.颜色) 颜色,NVL(b1.M,000000) M,NVL(b1.L,000000) L,NVL(b1.XL,000000) XL,NVL(b1.XXL,000000) XXL,NVL(a5.XXXL,000000) XXXL FROM ;
    b1 FULL JOIN a5 ON b1.款号=a5.款号 AND b1.颜色=a5.颜色 INTO CURSOR b1

不要为了打发无聊而做无聊的事!不要在虚幻的世界里做虚幻的事!
2010-08-11 16:49
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
得分:10 
select 款号,;
       颜色,;
       sum(iif(码尺='M   ',数量,0)) M,;
       sum(iif(码尺='L   ',数量,0)) L,;
       sum(iif(码尺='XL  ',数量,0)) XL,;
       sum(iif(码尺='XXL ',数量,0)) XXL,;
       sum(iif(码尺='XXXL',数量,0)) XXXL;
       from temp;
       group by 款号,颜色

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2010-08-11 21:02
中国龙王
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:484
专家分:283
注 册:2006-5-17
得分:0 
哈哈哈哈.我日,原来iif()是放在sum()里面的.我那天老是把sum()放在iif()里面,所以才搞成那样子

不要为了打发无聊而做无聊的事!不要在虚幻的世界里做虚幻的事!
2010-08-12 13:27
中国龙王
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:484
专家分:283
注 册:2006-5-17
得分:0 
老虎兄。不行呀。结果是每个款每个颜色每个码尺就一条记录。我要的是同一款同一颜色只用一条记录显示不同码尺
像上面的例子出来的是八条记录而不是两条记录

不要为了打发无聊而做无聊的事!不要在虚幻的世界里做虚幻的事!
2010-08-12 14:10
中国龙王
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:484
专家分:283
注 册:2006-5-17
得分:0 
不好意思。是我自己搞错了,结果出来了。那现在反过来。用表2怎么转表1呀

不要为了打发无聊而做无聊的事!不要在虚幻的世界里做虚幻的事!
2010-08-12 14:21
中国龙王
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:484
专家分:283
注 册:2006-5-17
得分:0 
帮我看一下表2转表1这样子好不好:
select 款号,颜色,M as 码尺 from 表2 where M#0 union select 款号,颜色,L as 码尺 from 表2 where L#0 ;
    union .............select 款号,颜色,XXXL as 码尺 from 表2 where XXXL#0 into cursor 表1

不要为了打发无聊而做无聊的事!不要在虚幻的世界里做虚幻的事!
2010-08-12 14:46
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
得分:10 
以下是引用中国龙王在2010-8-12 14:46:20的发言:

帮我看一下表2转表1这样子好不好:
select 款号,颜色,M as 码尺 from 表2 where M#0 union select 款号,颜色,L as 码尺 from 表2 where L#0 ;
    union .............select 款号,颜色,XXXL as 码尺 from 表2 where XXXL#0 into cursor 表1
缺少尺码和数量,或者你把数量当作了尺码。试试看这个:
select           款号, 颜色, 'M    ' as 尺码, M    as 数量 from 表B where M    # 0 ;
    union select 款号, 颜色, 'L    ' as 尺码, L    as 数量 from 表B where L    # 0 ;
    union select 款号, 颜色, 'XL   ' as 尺码, XL   as 数量 from 表B where XL   # 0 ;
    union select 款号, 颜色, 'XXL  ' as 尺码, XXL  as 数量 from 表B where XXL  # 0 ;
    union select 款号, 颜色, 'XXXL ' as 尺码, XXXL as 数量 from 表B where XXXL # 0

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2010-08-12 16:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-315419-1-1.html




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

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