try:select f_khbm,f_chbm,f_xsjg from (select top 1 N.f_khbm,N.f_chbm,N.f_xsjg,K1.f_jb,P1.f_jb  from tbda_kh_sj N  left outer join tbda_kh K1 on N.f_khbm=K1.f_khbm  left outer join tbda_kh K2 on K2.f_khbm like N.f_khbm+'%' left outer join tbda_ch P1 on N.f_chbm=P1.f_chbm  left outer join tbda_ch P2 on P2.f_chbm like N.f_chbm+'%'  where K2.f_khbm='001001' and P2.f_chbm='1001001001' order by K1.f_jb desc,P1.f_jb desc)A  
union all  
select '' as f_khbm,f_chbm,f_bzsj as f_xsjg  from tbda_ch_bz  where f_chbm='1001001001' and f_xh=0 

解决方案 »

  1.   

    因为K1.f_jb 列与P1.f_jb 列在选择列表中不存在,所以不能对他们进行排序
      

  2.   

    select top 1 f_khbm,f_chbm,f_xsjg  from  
    (select f_khbm,f_chbm,f_xsjg from (select top 1 N.f_khbm,N.f_chbm,N.f_xsjg,K1.f_jb as f_khjb,P1.f_jb from tbda_kh_sj N  left outer join tbda_kh K1 on N.f_khbm=K1.f_khbm  left outer join tbda_kh K2 on K2.f_khbm like N.f_khbm+'%' left outer join tbda_ch P1 on N.f_chbm=P1.f_chbm  left outer join tbda_ch P2 on P2.f_chbm like N.f_chbm+'%'  where K2.f_khbm='001001' and P2.f_chbm='1001001001' order by K1.f_jb desc,P1.f_jb desc)A  
    union all  
    select '' as f_khbm,f_chbm,f_bzsj as f_xsjg  from tbda_ch_bz  where f_chbm='1001001001' and f_xh=0 ) B 
    order by f_khbm desc
      

  3.   

    ORDER BY 子句
    指定结果集的排序。除非同时指定了 TOP,否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。语法
    [ ORDER BY { order_by_expression [ ASC | DESC ] }    [ ,...n ] ]参数
    order_by_expression指定要排序的列。可以将排序列指定为列名或列的别名(可由表名或视图名限定)和表达式,或者指定为代表选择列表内的名称、别名或表达式的位置的负整数。 可指定多个排序列。ORDER BY 子句中的排序列序列定义排序结果集的结构。ORDER BY 子句可包括未出现在此选择列表中的项目。然而,如果指定 SELECT DISTINCT,或者如果 SELECT 语句包含 UNION 运算符,则排序列必定出现在选择列表中。此外,当 SELECT 语句包含 UNION 运算符时,列名或列的别名必须是在第一选择列表内指定的列名或列的别名。
    ---看联机帮助
      

  4.   

    --没有问题啊。不过,你五个表的全外连接, 那肯定是奇慢无比啊!!!
    select top 1 f_xsjg  from  
    (select f_khbm,f_chbm,f_xsjg 
    from (select top 1 N.f_khbm,N.f_chbm,N.f_xsjg  
    from tbda_kh_sj N  left outer join tbda_kh K1 
    on N.f_khbm=K1.f_khbm  left outer join tbda_kh K2 
    on K2.f_khbm like N.f_khbm+'%' left outer join tbda_ch P1 
    on N.f_chbm=P1.f_chbm  left outer join tbda_ch P2 
    on P2.f_chbm like N.f_chbm+'%'  
    where K2.f_khbm='001001' and P2.f_chbm='1001001001' 
    order by K1.f_jb desc,P1.f_jb desc)A  
    union all  
    select '' as f_khbm,f_chbm,f_bzsj as f_xsjg  
    from tbda_ch_bz  
    where f_chbm='1001001001' and f_xh=0 ) B
      

  5.   

    ' select top '+IntToStr(FTopN)+' f_rzrq as 销售日期,f_khbm as 客户编码,f_khmc as 客户名称,f_chsl as 销售数量,f_hsdj as 价格 from '+
                            ' (select * from (select top '+IntToStr(FTopN)+' N.f_rzrq,N.f_khbm,isnull(kh.f_khmc,'''') as f_khmc, '+
                            ' S.f_chsl,S.f_hsdj '+
                            ' from tbnote_xscb S '+
                            ' left outer join tbnote_xszb N on S.f_djhm=N.f_djhm '+
                            ' left outer join tbda_kh kh on N.f_khbm=kh.f_khbm '+
                            ' where S.f_chbm='''+FChbm+''' and N.f_khbm='''+FKhbm+''''+FSql+
                            ' order by N.f_rzrq '+
                            ' )A '+
                            ' union all '+
                            ' select * from (select top '+IntToStr(FTopN)+' N.f_rzrq,N.f_khbm,isnull(kh.f_khmc,'''') as f_khmc, '+
                            ' S.f_chsl,S.f_hsdj '+
                            ' from tbnote_xscb S '+
                            ' left outer join tbnote_xszb N on S.f_djhm=N.f_djhm '+
                            ' left outer join tbda_kh kh on N.f_khbm=kh.f_khbm '+
                            ' where S.f_chbm='''+FChbm+''' and N.f_khbm<>'''+FKhbm+''''+FSql+
                            ' order by N.f_rzrq '+
                            ' )B'+
                            ' )C ';
      

  6.   

    像這樣的就仔細檢查字符串
    select '''' 為'
      

  7.   

    那么多表关联查询,如果经常做,设计表的时候可以考虑冗余数据,否则呢会很被动!
    每次看一个简单字段都要关联n个表,麻烦,简直是折磨我们开发人员,那不如折磨数据库,让他存取多点字段,只要我们忘资料库insert时候保证了字段的关联一致性即可FYI