日期:2014-05-18  浏览次数:20549 次

错误:没有为第 7 列(属于 'k')指定列
我写了一个行专列的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指定了,奇怪,求高手帮忙!

------解决方案--------------------
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次开票单位,
1 from... --红色处的1没有列名
------解决方案--------------------
呵呵,前面已经说了.
不过你第一条语句
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.