Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 更改SQL显示结果(按名称分组)_Sql Server - Fatal编程技术网

Sql server 更改SQL显示结果(按名称分组)

Sql server 更改SQL显示结果(按名称分组),sql-server,Sql Server,我的SQL查询可以显示以下结果: Name Project Date Peter A 2014-12-11 Peter C 2014-12-12 Peter D 2014-12-13 John B 2014-12-12 我想如下所示显示结果。没有显示相同的名称 Name Project Date Peter A

我的SQL查询可以显示以下结果:

Name   Project       Date
Peter    A           2014-12-11
Peter    C           2014-12-12
Peter    D           2014-12-13
John     B           2014-12-12
我想如下所示显示结果。没有显示相同的名称

Name     Project           Date
Peter       A            2014-12-11
            C            2014-12-12
            D            2014-12-13
John        B            2014-12-12
我的数据库服务器是MS SQL server 2012标准。如何通过SQL查询得到上述结果

谢谢


Tony

您可以使用ROW\U NUMBER函数执行以下操作

使用window函数查找每个groupname中的第一个日期

SELECT CASE WHEN rn = 1 THEN Name ELSE '' END Name,
       Project,
       Dates
FROM   (SELECT Row_number()OVER (partition BY Name ORDER BY Dates) rn,*
        FROM   Tablename) a 
;WITH CTE AS
(
   SELECT Name As OldName, Project, Date, 
          Row_Number() OVER (Partition By Name Order By Project) rn
   From YourTable
)
SELECT CASE WHEN rn = 1 THEN OldName ELSE '' End Name, Project, Date
FROM CTE
ORDER BY OldName, rn
SELECT CASE WHEN rn = 1 THEN Name ELSE '' END Name,
       Project,
       Dates
FROM   (SELECT Row_number()OVER (partition BY Name ORDER BY Dates) rn,*
        FROM   Tablename) a