读书人

sql2000查询,不知道那错了.该如何解决

发布时间: 2013-09-07 14:12:44 作者: rapoo

sql2000查询,不知道那错了.
这个查询找了我好辛苦,麻烦名位大虾有空看看什么问题,不胜感激.
Server: Msg 170, Level 15, State 1, Line 15
Line 15: Incorrect syntax near '='.
Server: Msg 170, Level 15, State 1, Line 30
Line 30: Incorrect syntax near '销售台账'.

SELECT 销售台账.序号, 销售台账.栋数, 销售台账.单元号, 销售台账.业主姓名, 销售台账.[建筑面积],
销售台账.[合同成交额(元)], 销售台账.按揭款, 销售台账.[合同约定首期款(元)], 销售台账.定金金额,
销售台账.首期房款_金额, 销售台账.首期房款_收款日期, 销售台账.二期房款_金额, 销售台账.二期房款_收款日期,
销售台账.三期房款_金额, 销售台账.三期房款_收款日期, 销售台账.尾款_金额, 销售台账.尾款_收款日期, 销售台账.按揭款_金额,
case when(IsNull(定金金额,'')<>'') then (定金金额) else (0) end+case when(IsNull(首期房款_收款日期,'')<>'')
then (首期房款_金额) else (0) end + case when(IsNull(二期房款_收款日期,'')<>'') then (二期房款_金额) else (0) end
+ case when(IsNull(三期房款_收款日期,'')<>'') then (三期房款_金额) else (0) end +
case when(IsNull(尾款_收款日期,'')<>'') then (尾款_金额) else (0) end + case when(IsNull(按揭款_金额,'')<>'')
then (按揭款_金额) else (0) end as 台账合计,
Sum(case when (isnull( 收款明细.已退标志,'') = '') then 收款明细.金额 else 0 end) AS 合同收款合计,
Sum(case when (isnull( 收款明细.已退标志,'') = '购房活动') then 收款明细.金额 else 0 end) AS 购房活动合计,
Sum(case when (isnull( 收款明细.已退标志,'') = '空间改造') then 收款明细.金额 else 0 end) AS 空间改造合计,
Sum(case when (isnull( 收款明细.已退标志,'') = '维修基金') then 收款明细.金额 else 0 end) AS 维修基金合计,
sum(发票明细.开票项目金额) 金额合计,发票明细.发票号码 = dbo.f_str(发票明细.幢,发票明细.房号),
发票明细.序号 = dbo.f_str2(发票明细.幢,发票明细.房号)

FROM 销售台账 lefT JOIN 收款明细 ON (收款明细.房号 = 销售台账.单元号) AND (收款明细.幢 = 销售台账.栋数)
left join 发票明细 on 销售台账.单元号 = 发票明细.房号 and 销售台账.栋数 = 发票明细.幢
GROUP BY 销售台账.序号, 销售台账.栋数, 销售台账.单元号, 销售台账.业主姓名,
销售台账.[建筑面积], 销售台账.[合同成交额(元)], 销售台账.按揭款, 销售台账.[合同约定首期款(元)],
销售台账.定金金额, 销售台账.首期房款_金额, 销售台账.首期房款_收款日期, 销售台账.二期房款_金额,
销售台账.二期房款_收款日期, 销售台账.三期房款_金额, 销售台账.三期房款_收款日期, 销售台账.尾款_金额,
销售台账.尾款_收款日期, 销售台账.按揭款_金额,case when(IsNull(定金金额,'')<>'') then (定金金额) else (0) end+
case when(IsNull(首期房款_收款日期,'')<>'') then (首期房款_金额) else (0) end +
case when(IsNull(二期房款_收款日期,'')<>'') then (二期房款_金额) else (0) end +


case when(IsNull(三期房款_收款日期,'')<>'') then (三期房款_金额) else (0) end +
case when(IsNull(尾款_收款日期,'')<>'') then (尾款_金额) else (0) end +
case when(IsNull(按揭款_金额,'')<>'') then (按揭款_金额) else (0) end
having (((销售台账.栋数)= 'A1' )) ORDER BY 销售台账.栋数, 销售台账.单元号
sql select as having isnull
[解决办法]

SELECT  销售台账.序号 ,
销售台账.栋数 ,
销售台账.单元号 ,
销售台账.业主姓名 ,
销售台账.[建筑面积] ,
销售台账.[合同成交额(元)] ,
销售台账.按揭款 ,
销售台账.[合同约定首期款(元)] ,
销售台账.定金金额 ,
销售台账.首期房款_金额 ,
销售台账.首期房款_收款日期 ,
销售台账.二期房款_金额 ,
销售台账.二期房款_收款日期 ,
销售台账.三期房款_金额 ,
销售台账.三期房款_收款日期 ,
销售台账.尾款_金额 ,
销售台账.尾款_收款日期 ,
销售台账.按揭款_金额 ,
CASE WHEN ( ISNULL(定金金额, '') <> '' ) THEN ( 定金金额 )
ELSE ( 0 )
END + CASE WHEN ( ISNULL(首期房款_收款日期, '') <> '' ) THEN ( 首期房款_金额 )
ELSE ( 0 )


END + CASE WHEN ( ISNULL(二期房款_收款日期, '') <> '' ) THEN ( 二期房款_金额 )
ELSE ( 0 )
END
+ CASE WHEN ( ISNULL(三期房款_收款日期, '') <> '' ) THEN ( 三期房款_金额 )
ELSE ( 0 )
END + CASE WHEN ( ISNULL(尾款_收款日期, '') <> '' ) THEN ( 尾款_金额 )
ELSE ( 0 )
END + CASE WHEN ( ISNULL(按揭款_金额, '') <> '' ) THEN ( 按揭款_金额 )
ELSE ( 0 )
END AS 台账合计 ,
SUM(CASE WHEN ( ISNULL(收款明细.已退标志, '') = '' ) THEN 收款明细.金额
ELSE 0
END) AS 合同收款合计 ,
SUM(CASE WHEN ( ISNULL(收款明细.已退标志, '') = '购房活动' ) THEN 收款明细.金额
ELSE 0
END) AS 购房活动合计 ,
SUM(CASE WHEN ( ISNULL(收款明细.已退标志, '') = '空间改造' ) THEN 收款明细.金额
ELSE 0
END) AS 空间改造合计 ,
SUM(CASE WHEN ( ISNULL(收款明细.已退标志, '') = '维修基金' ) THEN 收款明细.金额


ELSE 0
END) AS 维修基金合计 ,
SUM(发票明细.开票项目金额) 金额合计 ,
[发票明细.发票号码] = dbo.f_str(发票明细.幢, 发票明细.房号) ,--发票明细.发票号码,加上[]表示一个别名。
[发票明细.序号] = dbo.f_str2(发票明细.幢, 发票明细.房号)--如果不加[],表示字段,那:发票明细.序号 = dbo.f_str2(发票明细.幢, 发票明细.房号),就相当于赋值了,因为只有在UPDATE中,才能这么写。所以报错了
FROM 销售台账
LEFT JOIN 收款明细 ON ( 收款明细.房号 = 销售台账.单元号 )
AND ( 收款明细.幢 = 销售台账.栋数 )
LEFT JOIN 发票明细 ON 销售台账.单元号 = 发票明细.房号
AND 销售台账.栋数 = 发票明细.幢
GROUP BY 销售台账.序号 ,
销售台账.栋数 ,
销售台账.单元号 ,
销售台账.业主姓名 ,
销售台账.[建筑面积] ,
销售台账.[合同成交额(元)] ,
销售台账.按揭款 ,
销售台账.[合同约定首期款(元)] ,
销售台账.定金金额 ,
销售台账.首期房款_金额 ,
销售台账.首期房款_收款日期 ,
销售台账.二期房款_金额 ,
销售台账.二期房款_收款日期 ,
销售台账.三期房款_金额 ,
销售台账.三期房款_收款日期 ,
销售台账.尾款_金额 ,
销售台账.尾款_收款日期 ,
销售台账.按揭款_金额 ,
CASE WHEN ( ISNULL(定金金额, '') <> '' ) THEN ( 定金金额 )
ELSE ( 0 )
END + CASE WHEN ( ISNULL(首期房款_收款日期, '') <> '' ) THEN ( 首期房款_金额 )


ELSE ( 0 )
END + CASE WHEN ( ISNULL(二期房款_收款日期, '') <> '' ) THEN ( 二期房款_金额 )
ELSE ( 0 )
END
+ CASE WHEN ( ISNULL(三期房款_收款日期, '') <> '' ) THEN ( 三期房款_金额 )
ELSE ( 0 )
END + CASE WHEN ( ISNULL(尾款_收款日期, '') <> '' ) THEN ( 尾款_金额 )
ELSE ( 0 )
END + CASE WHEN ( ISNULL(按揭款_金额, '') <> '' ) THEN ( 按揭款_金额 )
ELSE ( 0 )
END
HAVING ( (( 销售台账.栋数 ) = 'A1' ) )
ORDER BY 销售台账.栋数 ,
销售台账.单元号


[解决办法]
引用:
首先谢谢Shawn,不过还是报错了,我也找了一通,不懂.

发票明细.幢, 发票明细.房号
这两个字段也要包含在GROUP BY列表中,即可。
[解决办法]
发票明细.房号、幢、房号需放在group by 后面
[解决办法]
这么多错误,我看可能是信息提供不够吧?至少还需要做子查询
[解决办法]
把长度改大一点试试
[解决办法]
引用:
Server: Msg 536, Level 16, State 1, Procedure f_str, Line 7
Invalid length parameter passed to the substring function.


提示很明显,是SUBSTRING函数,中的length参数出错了。
应该不是你这个函数的问题。找找你用到substring函数的地方,调试之。

读书人网 >SQL Server

热点推荐