本帖最后由 sonicryu 于 2013-06-25 13:04:48 编辑

解决方案 »

  1.   

    服务器: 消息 170,级别 15,状态 1,行 17
    第 17 行: 'xml' 附近有语法错误。
    服务器: 消息 156,级别 15,状态 1,行 18
    在关键字 'for' 附近有语法错误。
    服务器: 消息 170,级别 15,状态 1,行 19
    第 19 行: ',' 附近有语法错误。
    服务器: 消息 156,级别 15,状态 1,行 21
    在关键字 'from' 附近有语法错误。
    是不是SQL2000的关系? 
      

  2.   

    把备注和编号改成两个自定义函数就可以了。SQL SERVER 2000不支持for xml path参考:
    http://www.cnblogs.com/hanmos/archive/2011/09/15/2177391.html
      

  3.   


    CREATE FUNCTION dbo.f_s1(@id int)
    RETURNS varchar(8000)
    AS
    BEGIN
      DECLARE @r varchar(8000)
      SET @r = ''
      SELECT @r = @r + ',' + value FROM @表A WHERE id=@id
      RETURN STUFF(@r, 1, 1, '')
    END
    GO
    CREATE FUNCTION dbo.f_s2(@id int)
    RETURNS varchar(8000)
    AS
    BEGIN
      DECLARE @r varchar(8000)
      SET @r = ''
      SELECT @r = @r + ',' + value FROM @表A WHERE id=@id
      RETURN STUFF(@r, 1, 1, '')
    END
    GO请您看看这样行吗,那SQL语句应该怎么写呢
      

  4.   

    SQL2000的语句应该如何写呢 
      

  5.   

    CREATE FUNCTION dbo.f_bz(@id int )
    RETURNS varchar(8000)
    AS
    BEGIN
      DECLARE @r varchar(8000)
      SET @r = ''
      SELECT @r = @r + ' ' + [备注] FROM jj WHERE [合并序号]=@id 
      RETURN STUFF(@r, 1, 1, '')
    END
    GO
    CREATE FUNCTION dbo.f_zc(@id int )
    RETURNS varchar(8000)
    AS
    BEGIN
      DECLARE @r varchar(8000)
      SET @r = ''
      SELECT @r = @r + ' ' + [资产名称] FROM jj WHERE [合并序号]=@id 
      RETURN STUFF(@r, 1, 1, '')
    END
    GO
    CREATE FUNCTION dbo.f_kp(@id int)
    RETURNS varchar(8000)
    AS
    BEGIN
      DECLARE @r varchar(8000)
      SET @r = ''
      SELECT @r = @r + ',' + [卡片编号] FROM jj WHERE [合并序号]=@id
      RETURN STUFF(@r, 1, 1, '')
    END
    GO
    ----------------------------------------------------------------------------
    select [合并序号]=(SELECT TOP 1 [合并序号] FROM jj WHERE 合并序号=a.合并序号 AND [主件序号]='1'),[主件序号]=(SELECT TOP 1 [主件序号] FROM jj WHERE 合并序号=a.合并序号 AND [主件序号]='1'),[审核状态]=(SELECT TOP 1 [审核状态] FROM jj WHERE 合并序号=a.合并序号 AND [主件序号]='1'),[资产名称]=(SELECT TOP 1 [资产名称] FROM jj WHERE 合并序号=a.合并序号 AND [主件序号]='1'),dbo.f_zc(a.合并序号) as 资产组成,dbo.f_bz(a.合并序号) as 备注,[价值]=SUM([价值]),[数量]=(SELECT TOP 1 [数量] FROM jj WHERE 合并序号=a.合并序号 AND [主件序号]='1'),dbo.f_kp(a.合并序号) as 卡片编号from jj a group by 合并序号 order by 合并序号----------------------------------------------------------------------------
    请教各位大神这样写的话是否正确呢?2.如果后面还有20个字段格式和数量一样,能否不用再重复写代码呢? [数量]=(SELECT TOP 1 [数量] FROM jj WHERE 合并序号=a.合并序号 AND [主件序号]='1'),