SQL在执行内部联接时删除Duplicate标头

时间:2016-03-09 11:27:39

标签: sql sql-server sql-server-2014

我试图删除查询的重复标题...

here's my query

Select  po.BranchOrderNumber,pod.ItemCode, pod.ItemDescription From  RetailPosOrders po 
INNER JOIN RetailPosOrderDetails pod
ON po.BranchOrderID = pod.OrderID

我的查询结果现在看起来像这样。

enter image description here

现在我想要的是这样的。

enter image description here

提前谢谢。我打算在Report builder上使用它。我正在使用Microsoft Sql Server 2014。

2 个答案:

答案 0 :(得分:3)

这是最适合在应用程序级别进行的转换。它可以在SQL中使用,但请记住SQL查询和结果集(默认情况下)是无序的。您想要的结果有订购。

但是,您可以使用row_number()执行此操作:

Select (case when row_number() over (partition by po.BranchOrderNumber order by pod.ItemCode) = 1
             then po.BranchOrderNumber else ''
        end) as BranchOrderNumber
       pod.ItemCode, pod.ItemDescription
From RetailPosOrders po INNER JOIN
     RetailPosOrderDetails pod
     ON po.BranchOrderID = pod.OrderID
Order by po.BranchOrderNumber, pod.ItemCode;

这假设po.BranchOrderNumber - 尽管它的名字 - 存储为一个字符串(前导零表明情况就是这样)。

另外,还有一些重要的事情:

  • 外部order by必须与over子句中使用的字段相同。
  • 字段需要唯一地定义结果集中的每一行。 SQL中的order by不稳定,这意味着具有相同值的键可以按任何顺序出现,即使对于同一查询的不同运行也是如此。

答案 1 :(得分:1)

在Mssql服务器本身无法做到这一点

如果您要使用console / win / web应用程序显示它,我认为您必须在应用程序级别执行此操作。