SQL在执行内部联接时删除重复的标头
我正在尝试删除查询的重复标题SQL在执行内部联接时删除重复的标头,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,我正在尝试删除查询的重复标题 这是我的问题 Select po.BranchOrderNumber,pod.ItemCode, pod.ItemDescription From RetailPosOrders po INNER JOIN RetailPosOrderDetails pod ON po.BranchOrderID = pod.OrderID 我的查询结果现在看起来是这样的 现在我想要的是这样的东西 提前谢谢。我计划在报表生成器上使用此功能。。我正在使用Microsoft
这是我的问题
Select po.BranchOrderNumber,pod.ItemCode, pod.ItemDescription From RetailPosOrders po
INNER JOIN RetailPosOrderDetails pod
ON po.BranchOrderID = pod.OrderID
我的查询结果现在看起来是这样的
现在我想要的是这样的东西
提前谢谢。我计划在
报表生成器上使用此功能。。我正在使用Microsoft Sql Server 2014。Mssql Server本身无法做到这一点
我认为如果要使用console/win/web应用程序来显示它,就必须在应用程序级别进行 在Mssql服务器本身中无法做到这一点
我认为如果要使用console/win/web应用程序来显示它,就必须在应用程序级别进行 这是最好在应用程序级别完成的转换类型。这在SQL中是可能的,但请记住SQL查询和结果集(默认情况下)是无序的。您想要的结果有一个顺序
但是,您可以使用行编号()
:
这假设po.BranchOrderNumber
——不管它的名称如何——都存储为字符串(前导的零表示情况就是这样)
此外,还有两件重要的事情:
- 外部
orderby
需要与over
子句中使用的字段相同
- 字段需要唯一地定义结果集中的每一行。SQL中的
order by不稳定,这意味着具有相同值的键可以以任何顺序出现,即使对于同一查询的不同运行也是如此
这是最好在应用程序级别完成的转换类型。这在SQL中是可能的,但请记住SQL查询和结果集(默认情况下)是无序的。您想要的结果有一个顺序 但是,您可以使用
行编号()
:
这假设po.BranchOrderNumber
——不管它的名称如何——都存储为字符串(前导的零表示情况就是这样)
此外,还有两件重要的事情:
- 外部
需要与orderby
子句中使用的字段相同over
- 字段需要唯一地定义结果集中的每一行。SQL中的order by不稳定,这意味着具有相同值的键可以以任何顺序出现,即使对于同一查询的不同运行也是如此
microsoft report builder
,我不知道如何操作那里的数据集。我认为如果要使用应用程序显示数据集,必须在应用程序级别执行。我不认为在查询中执行此操作是一个好主意。它应该在报告级别进行管理。@回溯是的,如果它只在应用程序层中,我永远不会这样做。。。但是我使用的是microsoft report builder
,我不知道如何操作那里的数据集。确定有一种方法可以在服务器上实现这一点-大多数需求都可以在sql上实现,只是有时候这不是一个好的解决方案。确定有一种方法可以在服务器上实现这一点-大多数需求都可以在sql上实现,只是有时候这不是个好办法。
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;