SQL Server-Group by返回相同的信息

SQL Server-Group by返回相同的信息,sql,stored-procedures,grouping,Sql,Stored Procedures,Grouping,我习惯于MySQL如何与Group_Concat配合使用,因此很难理解SQL server如何与Group Concat配合使用。由于选择了Bx值,因此无法仅按PPNumber对xml路径分组 是否有一种方法可以根据pp.[PPNumber]作为PartNumber列对Bx值的分隔列表进行分组,还是有一种更好的方法可以让Bx仅按xml路径分组中的PPNumber列进行分组 SELECT pp.[PPNumber] as PartNumber, COUNT(PSN) as ActualCou

我习惯于MySQL如何与Group_Concat配合使用,因此很难理解SQL server如何与Group Concat配合使用。由于选择了Bx值,因此无法仅按PPNumber对xml路径分组

是否有一种方法可以根据pp.[PPNumber]作为PartNumber列对Bx值的分隔列表进行分组,还是有一种更好的方法可以让Bx仅按xml路径分组中的PPNumber列进行分组

SELECT  
pp.[PPNumber]  as PartNumber,
COUNT(PSN) as ActualCount, 
replace((SELECT b.Bx AS [data()]
        FROM def.dbo.[boxes] b
        Group By b.[PPNumber]  ,b.Bx
        ORDER BY b.Bx
        FOR xml path('')), ' ', ',') as Bxs

FROM def.dbo.[packtable] p
JOIN (SELECT Bx, [PPNumber] FROM def.dbo.[boxes] WHERE (CONCAT(Completed, ' 
  ', CompletedTime) > @sDate AND CONCAT(Completed,' ',  CompletedTime) < 
  @eDate)) b on p.Bx= b.Bx
JOIN def.dbo.[PPNumlist] pp on b.[PPNumber]  = pp.[PPNumber]  

GROUP BY pp.[PPNumber]
ORDER BY pp.[PPNumber]  ;

@子查询与主查询不相关。这一点我同意,但我不知道最好的办法。然而,我使用一个函数进行了测试,结果是正确的

我所做的只是通过了PN和日期范围,结果成功了

SELECT  
pp.[PPNumber]  as PartNumber,
COUNT(PSN) as ActualCount, 
def.dbo.udf_Get_PackedBoxListByPN(pp.[PPNumber], @sDate,@eDate) as Bxs

如果您可以发布一些示例数据,这将有所帮助,因为从结果和sql语句进行逆向工程非常困难。我怀疑问题在于SELECT子句中的子查询与主查询不相关,子查询的WHERE子句中的def.dbo.BOX与主查询的两个表之间没有关系。我还怀疑子查询是不必要的,因为您已经将box表加入了其中。样本数据将有助于澄清。样本数据在图像中。那么,我还应该提供哪些其他信息来帮助您呢@JNevill@JNevill就是要求你发布一个你开始的样本,而不仅仅是你想要的结果。在没有上下文的情况下查看查询会使任务变得更加困难。符合所需结果的数据,因此包含零件1112-1和1112-2以及方框1、2、3、4、5的记录。然后,我们将知道您的数据在数据库中的外观,以及您当前的问题,您希望它的外观。然后我们可以帮你写出SQL,让你达到目的。哦,好的。最初没有想到显示每个表的信息。很抱歉。最后我玩了更多,得到了一个传递每个PN值的函数,并让每个分隔的Bx列表工作