我写了一个行专列的sql 语句,调试没有问题:SELECT kp_id ,kp_hth, MAX(CASE 分组序号 WHEN 1 THEN rtrim(kp_hm) ELSE '0' END) AS 第1次开票号码 , 
MAX(CASE 分组序号 WHEN 1 THEN kp_je ELSE '0' END) AS 第1次开票单位,MAX(CASE 分组序号 WHEN 2 THEN rtrim(kp_hm) ELSE '0' END)
AS 第2次开票号码 , MAX(CASE 分组序号 WHEN 2 THEN kp_je ELSE '0' END) AS 第2次开票单位, 
1 from oinv_ID where (kp_rq between '2000-01-01' and '2010-12-31') GROUP BY kp_id,kp_hth但是我把他作为嵌套查询后SELECT distinct  t0.docnum , T0.NumAtCard as 合同号, T0.DocTotal as 合同总金额 , 
t0.docdate as 合同签订日期 ,T0.PaidSum as 已经支付, T0.CardCode as 客户代码, T0.CardName as 客户名称 ,
t3.name as 片区 , b.开票总金额 ,第2次开票号码
 FROM OINV T0  inner JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry inner join  [dbo].[@PQB]  t3 
on  T0.U_pq = T3.Code left outer join  
(select isnull(cast(sum(kp_je)as money),0) as 开票总金额 ,t.kp_id , t.kp_hth from( select * from oinv_kp where kp_rq between '2000-01-01' and '2010-12-31' )t group by t.kp_id,t.kp_hth) b on t0.docentry=b.kp_id 
 left outer join 
( SELECT kp_id ,kp_hth, MAX(CASE 分组序号 WHEN 1 THEN rtrim(kp_hm) ELSE '0' END) AS 第1次开票号码 , 
MAX(CASE 分组序号 WHEN 1 THEN kp_je ELSE '0' END) AS 第1次开票单位,MAX(CASE 分组序号 WHEN 2 THEN rtrim(kp_hm) ELSE '0' END) AS 第2次开票号码 , MAX(CASE 分组序号 WHEN 2 THEN kp_je ELSE '0' END) AS 第2次开票单位, 
1 from oinv_ID where (kp_rq between '2000-01-01' and '2010-12-31') GROUP BY kp_id,kp_hth) k
 on k.kp_id=t0.docentry  where (T0.NumAtCard <>N'作废' and   b.开票总金额<0) or (T0.NumAtCard <>N'作废' and  b.开票总金额>0)or 
(t0.numatcard is null and b.开票总金额>0)or(t0.numatcard is null and b.开票总金额<0)order by b.开票总金额 desc就会提示 没有为第 7 列(属于 'k')指定列 摆渡了下说是没有为列名指定名称,但是我已经用as指定了,奇怪,求高手帮忙!

解决方案 »

  1.   

    SELECT kp_id ,kp_hth, MAX(CASE 分组序号 WHEN 1 THEN rtrim(kp_hm) ELSE '0' END) AS 第1次开票号码 ,  
    MAX(CASE 分组序号 WHEN 1 THEN kp_je ELSE '0' END) AS 第1次开票单位,MAX(CASE 分组序号 WHEN 2 THEN rtrim(kp_hm) ELSE '0' END) AS 第2次开票号码 , MAX(CASE 分组序号 WHEN 2 THEN kp_je ELSE '0' END) AS 第2次开票单位,  
    1
     from oinv_ID where (kp_rq between '2000-01-01' and '2010-12-31') GROUP BY kp_id,kp_hth) k
     on k.kp_id=t0.docentry   红色部分去掉
      

  2.   

    ...第2次开票单位,  
    from... --红色处的1没有列名
      

  3.   

    ok ,谢谢楼上两位,了解了, 本来那个我是留着要做表关联用的!
    顺便再问下,,,我那个行专列语句是个动态的sql语句,我用存储过程的exec(@sql)输出的,所以字段名也是动态的,,
    如上我要把行专列的字段名称也显示到下面语句:
    SELECT distinct t0.docnum , T0.NumAtCard as 合同号, T0.DocTotal as 合同总金额 ,  
    t0.docdate as 合同签订日期 ,T0.PaidSum as 已经支付, T0.CardCode as 客户代码, T0.CardName as 客户名称 ,t3.name as 片区 , b.开票总金额 ,第2次开票号码 .......怎么做?也只能用动态的sql语句输出?
      

  4.   

    呵呵,前面已经说了.
    不过你第一条语句
    AS 第2次开票号码 , MAX(CASE 分组序号 WHEN 2 THEN kp_je ELSE '0' END) AS 第2次开票单位,  
    1 from oinv_ID where (kp_rq between '2000-01-01' and '2010-12-31') GROUP BY kp_id,kp_hth
    就含有1.