解决方案 »

  1.   

    想多了,再关联一次users表吧SQLSERVER 编译器会尽量重复利用已引用的表的以提高效率
      

  2.   


    我不是很懂,要怎么样才能关联一次那,在inner join一次?可是那样也不对啊
    我现在就是想在approval(这个是审批表)表中把申请人去出来(也就是apply中userId关联的name)如果我把apply当作主表(也就from apply) ,我的查询结果中的上一次审批时间就查询不出来,我应该怎么样做那??
      

  3.   

    apply.userId as 申请人 改为 users.name
    已经inner join了,直接取就可以了啊
      

  4.   

    你把代码贴上来,我稍微改下,这个图片,我还重新写麻烦或者你自己在后面加上
    inner join users as users2 on approval.userid=users2.id然后之前的申请人替换为 users2.name as 申请人
      

  5.   

    这是我之前的代码
    select apply.id as 申请编号,config.name as 配置节名称,apply.userId as 申请人,
    apply.time as 申请时间,approval.time as 上一次审批时间,users.name as 审批人,
    apply.state as 状态,apply.type as 申请类型 from approval 
                    inner join users on approval.userId = users.id 
                    inner join apply on approval.applyId = apply.id 
                    inner join config on config.id = apply.congfigId改之后的结果
    但是申请人和审批人一样了啊
    下面是apply表
    approval表
      

  6.   

    select apply.id as 申请编号,config.name as 配置节名称,users2.name as 申请人,
    apply.time as 申请时间,approval.time as 上一次审批时间,users.name as 审批人,
    apply.state as 状态,apply.type as 申请类型 from approval 
                    inner join users on approval.userId = users.id 
                    inner join apply on approval.applyId = apply.id 
                    inner join config on config.id = apply.congfigId
                    inner join users AS users2 on apply.userId = users2.id 之前没注意,你试试
      

  7.   

    select apply.id as 申请编号, config.name as 配置节名称, e.name as 申请人,
    apply.time as 时间, approval.time as 上一镒审批时间, users.name as 审批人,
    apply.state as 状态, apply.type as 申请类型 from approval
      inner join users on approval.userid = users.id
      inner join apply on approval.applyid = apply.id
      inner join config on config.id = apply.configid
      inner join users e on e.id = apply.userid
      

  8.   

    select apply.id as 申请编号,config.name as 配置节名称,users.name as 申请人,
    apply.time as 申请时间,approval.time as 上一次审批时间,
    STUFF((SELECT ','+name FROM users WHERE approval.userId=id FOR XML PATH('')),1,1,'')as 审批人,
    apply.state as 状态,apply.type as 申请类型
    from approval
    inner join users on apply.userId = users.id 
    inner join apply on approval.applyId = apply.id 
    inner join config on config.id = apply.congfigId
    GROUP BY apply.id,config.name,users.name,apply.time,approval.time,users.name,apply.state,apply.type
      

  9.   

    select apply.id as 申请编号,config.name as 配置节名称,users.name as 申请人,
    apply.time as 申请时间,approval.time as 上一次审批时间,
    STUFF((SELECT ','+name FROM users WHERE approval.userId=id FOR XML PATH('')),1,1,'')as 审批人,
    apply.state as 状态,apply.type as 申请类型
    from approval
    inner join users on apply.userId = users.id 
    inner join apply on approval.applyId = apply.id 
    inner join config on config.id = apply.congfigId
    GROUP BY apply.id,config.name,users.name,apply.time,approval.time,apply.state,apply.type
      

  10.   


    我像你这样打了,可是会提示我approval.userId没有包含在group by中,我加上了,查询结果就变成了这样了要不我把我的数据库发给你吧,帮我弄一下可以不,谢谢了
      

  11.   

    ;WITH CTE AS(
    select apply.id as 申请编号,config.name as 配置节名称,users.name as 申请人,
    apply.time as 申请时间,approval.time as 上一次审批时间,
    users2.name AS 审批人,
    apply.state as 状态,apply.type as 申请类型
    from approval
    inner join users on apply.userId = users.id 
    inner join apply on approval.applyId = apply.id 
    inner join config on config.id = apply.congfigId
    inner join users AS users2 on approval.userId = users2.id 
    --如果有条件放在这里面。
    )
    SELECT 申请编号,配置节名称,申请人,申请时间,上一次审批时间,状态,申请类型
    ,STUFF((SELECT ','+审批人 FROM CTE WHERE 申请编号=T1.申请编号 FOR XML PATH('')),1,1,'')as 审批人
    FROM CTE T1
    GROUP BY 申请编号,配置节名称,申请人,申请时间,上一次审批时间,状态,申请类型
      

  12.   

    您好,又来麻烦你了,用你这个代码;WITH CTE AS(
    select apply.id as 申请编号,config.name as 配置节名称,users.name as 申请人,
    apply.time as 申请时间,approval.time as 上一次审批时间,
    users2.name AS 审批人,
    apply.state as 状态,apply.type as 申请类型
    from approval
    inner join users on apply.userId = users.id 
    inner join apply on approval.applyId = apply.id 
    inner join config on config.id = apply.congfigId
    inner join users AS users2 on approval.userId = users2.id 
    --如果有条件放在这里面。
    )
    SELECT 申请编号,配置节名称,申请人,申请时间,上一次审批时间,状态,申请类型
    ,STUFF((SELECT ','+审批人 FROM CTE WHERE 申请编号=T1.申请编号 FOR XML PATH('')),1,1,'')as 审批人
    FROM CTE T1
    GROUP BY 申请编号,配置节名称,申请人,申请时间,上一次审批时间,状态,申请类型我查询出来了,就是申请编号会有两条,怎么样把这两条数据整合成一个那,上一次审批时间是不一样的,以距离现在最近的时间为准,非常感谢
      

  13.   

    ;WITH CTE AS(
    select apply.id as 申请编号,config.name as 配置节名称,users.name as 申请人,
    apply.time as 申请时间,approval.time as 上一次审批时间,
    users2.name AS 审批人,
    apply.state as 状态,apply.type as 申请类型,
    ROW_NUMBER()OVER(PARTITION BY apply.id ORDER BY approval.time DESC)RN
    from approval
    inner join users on apply.userId = users.id 
    inner join apply on approval.applyId = apply.id 
    inner join config on config.id = apply.congfigId
    inner join users AS users2 on approval.userId = users2.id 
    --如果有条件放在这里面。
    )
    SELECT 申请编号,配置节名称,申请人,申请时间,上一次审批时间,状态,申请类型
    ,STUFF((SELECT ','+审批人 FROM CTE WHERE 申请编号=T1.申请编号 FOR XML PATH('')),1,1,'')as 审批人
    FROM CTE T1
    WHERE RN=1
    --GROUP BY 申请编号,配置节名称,申请人,申请时间,上一次审批时间,状态,申请类型试试