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中显示空白记录_Sql_Sql Server - Fatal编程技术网

如果存在重复行,如何在sql中显示空白记录

如果存在重复行,如何在sql中显示空白记录,sql,sql-server,Sql,Sql Server,我的SQL查询结果 EmployeeID EmployeeName Department 1 John Sales 2 Robert Sales 3 Sudhir Sales 4 Roj Development 员工ID员工姓名部门 1约翰销售部 2罗伯特销售部 3苏迪尔销售 4 Roj开发 输出应该是 Em

我的SQL查询结果

EmployeeID EmployeeName Department 1 John Sales 2 Robert Sales 3 Sudhir Sales 4 Roj Development 员工ID员工姓名部门 1约翰销售部 2罗伯特销售部 3苏迪尔销售 4 Roj开发 输出应该是

EmployeeID EmployeeName Department 1 John Sales 2 Robert 3 Sudhir 4 Roj Development 员工ID员工姓名部门 1约翰销售部 2罗伯特 3苏迪尔 4 Roj开发 您可以这样做:

;WITH CTE
AS
( 
   SELECT EmployeeID, EmployeeName, Department,
     ROW_NUMBER() OVER(PARTITION BY Department ORDER BY(SELECT 1)) rownum
  FROM table1
)
SELECT
  EmployeeId,
  EmployeeName,
  CASE rownum
    WHEN 1 THEN Department
    ELSE ''
  END AS Department
FROM CTE
ORDER BY EmployeeID;
注意:尽量不要在SQL中执行这些格式化操作。SQL与格式无关。

您可以这样做:

;WITH CTE
AS
( 
   SELECT EmployeeID, EmployeeName, Department,
     ROW_NUMBER() OVER(PARTITION BY Department ORDER BY(SELECT 1)) rownum
  FROM table1
)
SELECT
  EmployeeId,
  EmployeeName,
  CASE rownum
    WHEN 1 THEN Department
    ELSE ''
  END AS Department
FROM CTE
ORDER BY EmployeeID;

注意:尽量不要在SQL中执行这些格式化操作。SQL与格式无关。

我建议您让SQL server提取数据,并让客户端/业务/报表层以正确的方式呈现数据。我建议您让SQL server提取数据,并让客户端/业务/报表层以正确的方式呈现数据。谢谢,我正在寻找sameYes,这很有帮助。我使用了两列:densite_RANK()OVER(ORDER BY(SELECT Department))作为'A',ROW_NUMBER()OVER(PARTITION BY Department ORDER BY Department)作为'B',然后在SELECT语句中使用:case when convert(varchar(5),[B])='1'然后convert(varchar(5),[A]),否则“end”NO.@Mahmoud Gamal这个命令在MYSQL上运行吗?我试图运行它,但它有错误。@kiLLua-不,它不会运行。Mysql没有SQL Server那样的行号功能,但还有其他解决方法可以实现同样的功能。但是,对于这个问题,我不建议在sql端对数据进行任何格式化,格式化应该在前端完成,而不是在sql中完成。因此,如果您想做同样的事情,请在前端而不是在sql中进行。只需正常选择数据,然后在前端将很容易按照您想要的方式格式化数据。我希望这会有帮助。谢谢,我在找sameYes,它很有用。我使用了两列:densite_RANK()OVER(ORDER BY(SELECT Department))作为'A',ROW_NUMBER()OVER(PARTITION BY Department ORDER BY Department)作为'B',然后在SELECT语句中使用:case when convert(varchar(5),[B])='1'然后convert(varchar(5),[A]),否则“end”NO.@Mahmoud Gamal这个命令在MYSQL上运行吗?我试图运行它,但它有错误。@kiLLua-不,它不会运行。Mysql没有SQL Server那样的行号功能,但还有其他解决方法可以实现同样的功能。但是,对于这个问题,我不建议在sql端对数据进行任何格式化,格式化应该在前端完成,而不是在sql中完成。因此,如果您想做同样的事情,请在前端而不是在sql中进行。只需正常选择数据,然后在前端将很容易按照您想要的方式格式化数据。我希望这有帮助。