我习惯于MySQL如何与Group_Concat
一起工作,因此很难理解SQL服务器如何使用group concat。因为我选择了PPNumber
值,所以我不能仅仅通过xml path
对Bx
分组进行分组。
有没有办法根据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] ;
@JNevil提到子查询与主查询无关。我同意这一点,但我不知道最好的方法。但是,我使用函数进行了测试,结果正确。
我所做的只是通过PN和日期范围而且它有效!
SELECT
pp.[PPNumber] as PartNumber,
COUNT(PSN) as ActualCount,
def.dbo.udf_Get_PackedBoxListByPN(pp.[PPNumber], @sDate,@eDate) as Bxs