这样(a.完成重量)查询出来只有四列,重量,长,宽,高,   请教如何才能显示,a.*的全部列呢?Select 
a.完成重量,
Case
When (厚度<=0.8) then 'A-0.8以下'
When (厚度>=0.81 And 厚度<=1.2) then 'B-0.81~1.2'
When (厚度>=1.21 And 厚度<=1.6) then 'C-0.81~1.6'
When (厚度>=1.61 And 厚度<=2.3) then 'D-0.81~2.3'
When (厚度>=2.31 And 厚度<=3.2) then 'E-0.81~3.2'
Else
'厚度异常' 
End
厚度区间
,
Case 
When (宽度<200) Then 'A-200以下'
When (宽度>=200 And 宽度<=399) Then 'B-200~399'
When (宽度>=400 And 宽度<=499) Then 'C-400~499'
When (宽度>=500 And 宽度<=599) Then 'D-500~599'
When (宽度>=600 And 宽度<=799) Then 'E-600~799'
When (宽度>=800 And 宽度<=999) Then 'F-800~999'
When (宽度>=1000 And 宽度<=1199) Then 'G-1000~1199'
When (宽度>=1200 And 宽度<=1399) Then 'H-1200~1399'
Else 'I-宽度异常'
End 
宽度区间
,Case 
When (长度<200) Then 'A-200以下'
When (长度>=200 And 长度<=399) Then 'B-200~399'
When (长度>=400 And 长度<=499) Then 'C-400~499'
When (长度>=500 And 长度<=599) Then 'D-500~599'
When (长度>=600 And 长度<=799) Then 'E-600~799'
When (长度>=800 And 长度<=999) Then 'F-800~999'
When (长度>=1000 And 长度<=1199) Then 'G-1000~1199'
When (长度>=1200 And 长度<=1399) Then 'H-1200~1399'
Else 'I-长度异常'
End 
长度区间from
RPT_TEST_20100621 aunion all
Select 0 完成重量,a.*,b.*,c.*
from
(
Select  'A-0.8以下' 厚度区间 from Dual
union all
Select  'B-0.81~1.2' 厚度区间 from Dual
union all
Select  'C-0.81~1.6' 厚度区间 from Dual
union all
Select  'D-0.81~2.3' 厚度区间 from Dual
union all
Select  'E-0.81~3.2' 厚度区间 from Dual
) a,
(
Select  'A-200以下' 宽度区间 from Dual 
union all
Select  'B-200~399' 宽度区间 from Dual 
union all
Select  'C-400~499' 宽度区间 from Dual 
union all
Select  'D-500~599' 宽度区间 from Dual 
union all
Select  'E-600~799' 宽度区间 from Dual 
union all
Select  'F-800~999' 宽度区间 from Dual 
union all
Select  'G-1000~1199' 宽度区间 from Dual 
union all
Select  'H-1200~1399' 宽度区间 from Dual 
) b,
(
Select  'A-200以下' 长度区间 from Dual 
union all
Select  'B-200~399' 长度区间 from Dual 
union all
Select  'C-400~499' 长度区间 from Dual 
union all
Select  'D-500~599' 长度区间 from Dual 
union all
Select  'E-600~799' 长度区间 from Dual 
union all
Select  'F-800~999' 长度区间 from Dual 
union all
Select  'G-1000~1199' 长度区间 from Dual 
union all
Select  'H-1200~1399' 长度区间 from Dual 
) c

解决方案 »

  1.   

    这个问题不结合之前的帖子问得比较突兀,呵呵
    select a.完成重量,a.某字段1,a.某字段2 
    ...
    union all
    select 0 完成重量,0 某字段1, 0 某字段2..
    字段应该使用用于计量的数值字段,其他的无关字段不要出现
      

  2.   

    用数字型的字段是可以,但是我现增加了生产线,生产线是字符型的,请教该怎么弄,请看照片, 照片地址: http://hi.csdn.net/space-419735-do-album-picid-575812.html
      

  3.   

    把这个excel文件发出来看看,不然每次的时候都用在构造测试数据上了。呵呵。
      

  4.   

    a只有一列 --> 厚度区间
      

  5.   

    这个是阿泰,帮我写的代码,查询出来是三列,这么复杂的代码,我真的不会写,如果要增加查询出来的列,
    那在 A.完成重量后加字段就行了,select a.完成重量,a.某字段1,a.某字段2  
    ...前提是后面加的字段必须跟“完成重量”一样的数据类型,而我现在想添加的字段类型是字符型的,就不行啦,
      

  6.   

    首先我们要知道union all的用法:
    1:它是把两个结果集相加
    2:限制条件要求前边的结果集各个字段的数据类型与后边的结果集各个字段的数据类型要完全一致
    给个例子吧:
    with t as
    (
    select 0 a,'a' b from dual
    union all
    select 1 a,'b' b from dual
    union all
    select 2 a,'c' b from dual
    union all
    select 2 a,'c' b from dual
    )
    select * from t
    这个a列是数值型的b列是字符型的,查询没有问题
    with t as
    (
    select 0 a,'a' b from dual
    union all
    select 1 a,'b' b from dual
    union all
    select 2 a,'c' b from dual
    union all
    select 2 a,0 b from dual
    )
    select * from t
    这个查询就会出错,因为数据类型不对
      

  7.   


    Select 
    a.完成重量,a.投入重量, a.废料,
    Case
    When (厚度<=0.8) then 'A-0.8以下'
    When (厚度>=0.81 And 厚度<=1.2) then 'B-0.81~1.2'
    When (厚度>=1.21 And 厚度<=1.6) then 'C-0.81~1.6'
    When (厚度>=1.61 And 厚度<=2.3) then 'D-0.81~2.3'
    When (厚度>=2.31 And 厚度<=3.2) then 'E-0.81~3.2'
    Else
    '厚度异常' 
    End
    厚度区间
    ,
    Case 
    When (宽度<200) Then 'A-200以下'
    When (宽度>=200 And 宽度<=399) Then 'B-200~399'
    When (宽度>=400 And 宽度<=499) Then 'C-400~499'
    When (宽度>=500 And 宽度<=599) Then 'D-500~599'
    When (宽度>=600 And 宽度<=799) Then 'E-600~799'
    When (宽度>=800 And 宽度<=999) Then 'F-800~999'
    When (宽度>=1000 And 宽度<=1199) Then 'G-1000~1199'
    When (宽度>=1200 And 宽度<=1399) Then 'H-1200~1399'
    Else 'I-宽度异常'
    End 
    宽度区间
    ,Case 
    When (长度<200) Then 'A-200以下'
    When (长度>=200 And 长度<=399) Then 'B-200~399'
    When (长度>=400 And 长度<=499) Then 'C-400~499'
    When (长度>=500 And 长度<=599) Then 'D-500~599'
    When (长度>=600 And 长度<=799) Then 'E-600~799'
    When (长度>=800 And 长度<=999) Then 'F-800~999'
    When (长度>=1000 And 长度<=1199) Then 'G-1000~1199'
    When (长度>=1200 And 长度<=1399) Then 'H-1200~1399'
    Else 'I-长度异常'
    End 
    长度区间
    ,
    生产线
    from
    RPT_TEST_20100625 aunion all
    Select 0 完成重量,0 投入重量, 0 废料,a.*,b.*,c.*,d.*
    from
    (
    Select  'A-0.8以下' 厚度区间 from Dual
    union all
    Select  'B-0.81~1.2' 厚度区间 from Dual
    union all
    Select  'C-0.81~1.6' 厚度区间 from Dual
    union all
    Select  'D-0.81~2.3' 厚度区间 from Dual
    union all
    Select  'E-0.81~3.2' 厚度区间 from Dual
    ) a,
    (
    Select  'A-200以下' 宽度区间 from Dual 
    union all
    Select  'B-200~399' 宽度区间 from Dual 
    union all
    Select  'C-400~499' 宽度区间 from Dual 
    union all
    Select  'D-500~599' 宽度区间 from Dual 
    union all
    Select  'E-600~799' 宽度区间 from Dual 
    union all
    Select  'F-800~999' 宽度区间 from Dual 
    union all
    Select  'G-1000~1199' 宽度区间 from Dual 
    union all
    Select  'H-1200~1399' 宽度区间 from Dual 
    ) b,
    (
    Select  'A-200以下' 长度区间 from Dual 
    union all
    Select  'B-200~399' 长度区间 from Dual 
    union all
    Select  'C-400~499' 长度区间 from Dual 
    union all
    Select  'D-500~599' 长度区间 from Dual 
    union all
    Select  'E-600~799' 长度区间 from Dual 
    union all
    Select  'F-800~999' 长度区间 from Dual 
    union all
    Select  'G-1000~1199' 长度区间 from Dual 
    union all
    Select  'H-1200~1399' 长度区间 from Dual 
    ) c,
    (Select Distinct 生产线 from RPT_TEST_20100625) d
      

  8.   

    最近比较忙,坐下来的时候比较少,所以回复的晚了。
    前面的语句能全拿到你的数据。但是你的这个图显示的是明显的有问题的你的“生产线”跟后面的几个区间,本身也是多对多的关系
    所以你下面的这个表格的M1列是错的,不信你随便填上你要的A1,A2之类的看看。
    当然,如果你的某条生产线与区间是严格的一一对应关系,也是可以的。
      

  9.   

    我的报表设计的就是为了,统计哪条线,各区间产品的重量,所以这样是可以的,也就是A1在各个区间内的生产重量的汇总,我在用这个SQL前已经把,数据筛选好了,比如:A1对应的所有区间内的产品的重量,所以阿泰哥,你给我的代码是可以的,也就是一对多的关系,