;WITH CTE AS(
SELECT ROW_NUMBER()OVER(PARTITION BY 姓名 ORDER BY GETDATE())RN
,COUNT(1)OVER(PARTITION BY 姓名)c
,*
FROM TB
)
SELECT CASE WHEN RN>1 THEN '' ELSE 姓名 END 姓名
, CASE WHEN C>1 THEN CAST(RN AS VARCHAR)+'.'+检查内容 ELSE 检查内容 END 检查内容
FROM CTE

解决方案 »

  1.   

    如果你要有1 2 3而且换行的话,比较复杂,如SELECT 姓名
    ,CAST(STUFF((
    SELECT CHAR(13)+CAST(ROW_NUMBER()OVER(PARTITION BY 姓名 ORDER BY GETDATE()) AS VARCHAR)
    +'.'+检查内容
    FROM TB T2
    WHERE T1.姓名=T2.姓名
    FOR XML PATH('')
    ),1,6,'')AS XML).value('.','varchar(MAX)')
    FROM TB T1
    GROUP BY 姓名
      

  2.   

    SELECT 姓名
        ,STUFF((
            SELECT ','+检查内容
            FROM TB T2
            WHERE T1.姓名=T2.姓名
            FOR XML PATH('')
        ),1,6,'')
    FROM TB T1
    GROUP BY 姓名可以简化成这样,结构上差不多,但没那么复杂
      

  3.   

    老师您给的这个写法我asp输出的时候没有换行呀
      

  4.   

    你要把\n在页面上换成<br>
      

  5.   

    这个老师为什么在asp查询中执行不了呢
      

  6.   

    单独在SQLSERVER客户端可以执行是吗?在ASP页面上执行不了,报什么错呢?像普通的 SELECT * FROM TB这样可以执行吗?
      

  7.   

    放在sql客户端可以,asp执行其他语句也正常,就是执行那个带123的执行不了
      

  8.   

    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </HEAD><BODY>
    <div align="center">
      <!--#include file="conn.asp" -->
      <span class="style17">&nbsp;&nbsp;</span>
      <table width="587" border="0" align="center" cellpadding="0" cellspacing="1">
        <tr bgcolor="#3399CC">
          <!-- 用户名 -->
          <td width="58" height="25"><div align="center" class="style29 style19" style="color: #FFFFFF">
            <div align="center">检查人员</div>
          </div></td>
          <td width="285"><div align="center" class="style29 style19" style="color: #FFFFFF">
            <div align="center">问题处理情况</div>
          </div></td>
          <!--备份 -->
        </tr>
      </table>
    </div>
    <% set rs=conn.execute("SELECT fxr,STUFF((SELECT ','+wtnr FROM wtk T2 WHERE T1.fxr=T2.fxr FOR XML PATH('')),1,6,'')wtnr  FROM wtk T1 GROUP BY fxr")
    rs.open sql,conn,2,2     'RS参数设定为执行SQL的查询语法,数据库文件里的employee表中的数据,无论任何条件,全部设计为查询的对象,并由RS作为管理的参数。if rs.EOF or rs.BOF then
    Response.Write "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请输入所要查询的时间段进行查询"
    else
    do while not rs.EOF or rs.BOF
    %> <table width="588" border="1" align="center" cellpadding="0" cellspacing="1">
      <tr>
        <!-- 用户名 -->
        <td width="56" height="25"><div align="center" class="style19">
          <div align="center"><%=rs("fxr")%></div>
        </div></td>
        <td width="282"><div align="center" class="style19">
          <div align="center"><%=rs("wtnr")%></div>
        </div></td>
      </tr>
    </table>      <%
    rs.movenext
    loop
    end if
    set rs=nothing 
    set conn=nothing
    %>
    </BODY>
    </HTML>
      

  9.   

    放在sql客户端可以,asp执行其他语句也正常,就是执行那个带123的执行不了另外老师帮我看看换行的问题呗
      

  10.   

    执行不了,是什么意思了,没有效果,还是报错呢?还有你要替换字符
    把\n在页面上换成<br>
      

  11.   

    \n在页面上换成<br>了吗?
      

  12.   

    老师现在不是换行的问题,那个换行我可以解决了应该,现在是语句在asp中没有效果,不执行。<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </HEAD><BODY>
    <div align="center">
      <!--#include file="conn.asp" -->
      <span class="style17">&nbsp;&nbsp;</span>
      <table width="587" border="0" align="center" cellpadding="0" cellspacing="1">
        <tr bgcolor="#3399CC">
          <!-- 用户名 -->
          <td width="58" height="25"><div align="center" class="style29 style19" style="color: #FFFFFF">
            <div align="center">检查人员</div>
          </div></td>
          <td width="285"><div align="center" class="style29 style19" style="color: #FFFFFF">
            <div align="center">问题处理情况</div>
          </div></td>
          <!--备份 -->
        </tr>
      </table>
    </div>
    <% set rs=conn.execute("SELECT fxr,STUFF((SELECT ','+wtnr FROM wtk T2 WHERE T1.fxr=T2.fxr FOR XML PATH('')),1,6,'')wtnr  FROM wtk T1 GROUP BY fxr")
    rs.open sql,conn,2,2     if rs.EOF or rs.BOF then
    Response.Write "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请输入所要查询的时间段进行查询"
    else
    do while not rs.EOF or rs.BOF
    %> <table width="588" border="1" align="center" cellpadding="0" cellspacing="1">
      <tr>
        <!-- 用户名 -->
        <td width="56" height="25"><div align="center" class="style19">
          <div align="center"><%=rs("fxr")%></div>
        </div></td>
        <td width="282"><div align="center" class="style19">
          <div align="center"><%=rs("wtnr")%></div>
        </div></td>
      </tr>
    </table>      <%
    rs.movenext
    loop
    end if
    set rs=nothing 
    set conn=nothing
    %>
    </BODY>
    </HTML>
      

  13.   

    SELECT fxr,STUFF((SELECT ','+wtnr FROM wtk T2 WHERE T1.fxr=T2.fxr FOR XML PATH('')),1,1,'')wtnr  FROM wtk T1 GROUP BY fxr
    呃,这边改为1试试
      

  14.   

    老师贴错语句了,那个语句可以正常执行的SELECT fxr,CAST(STUFF((SELECT CHAR(13)+CAST(ROW_NUMBER()OVER(PARTITION BY fxr ORDER BY GETDATE()) AS VARCHAR)+'.'+wtnr FROM wtk T2 WHERE T1.fxr=T2.fxr FOR XML PATH('')),1,6,'')AS XML).value('.','varchar(MAX)') FROM wtk T1 GROUP BY fxr
    这个不执行就是带123的那个
      

  15.   

    或者老师教我怎样把这条语句写在sql的储存过程里,我用asp直接调用
      

  16.   

    可以正常执行,那句也要改为1,之前没注意,而这边这个是6没错CREATE PROCEDURE 存储过程名称
    AS
    内容那你试下,看存储过程可以不
      

  17.   

    我在储存过程里面建完了名称是wtkk,在asp中直接select * from wtkk这样对么?没有反映呢
      

  18.   

    SELECT fxr
    ,STUFF((
    SELECT
    CAST(ROW_NUMBER()OVER(PARTITION BY fxr ORDER BY GETDATE()) AS VARCHAR)
    +'.'+wtnr
    FROM wtk T2
    WHERE T1.fxr=T2.fxr
    FOR XML PATH(''))
    ,1,1,'')
    FROM wtk T1 GROUP BY fxr这个有1 2 3没有换行不过,你既然是用在ASP页面上的,你可以利用ASP语言的功能,
    还是用SELECT * FROM TB的方式查询
    然后,for循环处理,将相同行合并
    不管是行号,还是换行,都很方便处理,而且要速度可能要快些
      

  19.   

    嗯这个可以执行,可能问题就出现在了换行上面了,谢谢老师我研究研究asp里面的换行
      

  20.   

    SELECT fxr
        ,(SELECT
                CAST(ROW_NUMBER()OVER(PARTITION BY fxr ORDER BY GETDATE()) AS VARCHAR)
                +'.'+wtnr
            FROM wtk T2
            WHERE T1.fxr=T2.fxr
            FOR XML PATH(''))wtnr 
    FROM wtk T1 GROUP BY fxr哈哈,不小心给删了
    要不,随便给个标记符,查出来后,你再换成换行符
      

  21.   

    老师可不可以把这条语句写成临时表,如
    SELECT fxr
        ,(SELECT
                CAST(ROW_NUMBER()OVER(PARTITION BY fxr ORDER BY GETDATE()) AS VARCHAR)
                +'.'+wtnr
            FROM wtk T2
            WHERE T1.fxr=T2.fxr
            FOR XML PATH(''))wtnr into #a
    FROM wtk T1 GROUP BY fxrselect * from #a
    后在写条sql把123给换行了呀,能按照学生的思路写一条换行语句么,
      

  22.   

    create table #t(
     name nvarchar(10),
     nr nvarchar(1000)
    )insert into #t values
    ('王',                  '检查网站系统'),
    ('王',                  '检查网站内容'),
    ('王',                  '检查网站框架'),
    ('李',                  '内容内容内容')
    with cte as
    (
    select *,ROW_NUMBER()over(PARTITION by name order by name) id from #t
    )
    select *,name nname from cte where id=1
    union all
    select '',nr,id,name from cte where id>1
    order by nname,id
      

  23.   

    --做成视图吧,换行符\n在页面上也没用,还是需要替换成<br>的
    CREATE VIEW 视图名称
    AS
    SELECT fxr,CAST(STUFF((SELECT CHAR(13)+CAST(ROW_NUMBER()OVER(PARTITION BY fxr ORDER BY GETDATE()) AS VARCHAR)+'.'+wtnr FROM wtk T2 WHERE T1.fxr=T2.fxr FOR XML PATH('')),1,6,'')AS XML).value('.','varchar(MAX)') FROM wtk T1 GROUP BY fxr
    GO
    --执行的时候直接 SELECT * FROM 视图名称
      

  24.   

    set rs=conn.execute("SELECT fxr,STUFF((SELECT ','+wtnr FROM wtk T2 WHERE T1.fxr=T2.fxr FOR XML PATH('')),1,6,'')wtnr  FROM wtk T1 GROUP BY fxr")
    rs.open sql,conn,2,2 
    这算什么逻辑?
    先用 conn.execute 做了一次查询,然后什么都没做又做了一次查询。
    既然只需要第二次查询结果,前一次查询又什么用?
    最终输出结果由sql决定,sql变量里面是什么内容?