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

问题描述 投票:1回答:1

我习惯于MySQL如何与Group_Concat一起工作,因此很难理解SQL服务器如何使用group concat。因为我选择了PPNumber值,所以我不能仅仅通过xml pathBx分组进行分组。

有没有办法根据pp.[PPNumber] as PartNumber列制作Bx值组的分隔列表,还是有更好的方法让Bxs只能通过PPNumber分组中的xml path列进行分组?

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]  ;

enter image description here

sql stored-procedures grouping
1个回答
1
投票

@JNevil提到子查询与主查询无关。我同意这一点,但我不知道最好的方法。但是,我使用函数进行了测试,结果正确。

我所做的只是通过PN和日期范围而且它有效!

SELECT  
pp.[PPNumber]  as PartNumber,
COUNT(PSN) as ActualCount, 
def.dbo.udf_Get_PackedBoxListByPN(pp.[PPNumber], @sDate,@eDate) as Bxs
© www.soinside.com 2019 - 2024. All rights reserved.