如何使用sql查询查看带有group by子句的逗号分隔字符串中的列值?

nszi6y05  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(365)

如何在下面的sql查询(在sql server 2014中)中获取带有逗号分隔字符串的u\u producttype列。它需要按docnum分组,并且在转换为逗号分隔的字符串时不需要u\u producttype中的空值。我还尝试了“for xml path”选项。这是我的问题供你参考,

  1. SELECT
  2. ORDR.DocNum, ORDR.CardCode, ORDR.CardName, ORDR.SlpCode,
  3. OSLP.SlpName, OITM.U_Product_Type,
  4. SUM (RDR1.LineTotal) LineTotal,
  5. ISNULL (SUM (DPI1.LineTotal), 0) dwpnt
  6. FROM
  7. ORDR
  8. INNER JOIN
  9. RDR1 ON RDR1.DocEntry = ORDR.DocEntry
  10. LEFT JOIN
  11. OITM ON OITM.ItemCode = RDR1.ItemCode
  12. LEFT JOIN
  13. OSLP ON OSLP.SlpCode = ORDR.SlpCode
  14. LEFT JOIN
  15. DPI1 ON DPI1.BaseEntry = RDR1.DocEntry
  16. AND DPI1.TargetType <> 14
  17. AND DPI1.BaseLine = RDR1.LineNum
  18. LEFT JOIN
  19. RCT2 ON RCT2.DocEntry = DPI1.DocEntry
  20. LEFT JOIN
  21. ORCT ON RCT2.DocNum = ORCT.DocEntry AND ORCT.Canceled = 'N'
  22. WHERE
  23. ORDR.CANCELED = 'N'
  24. AND ISNULL (DPI1.LineTotal, 0) = 0
  25. AND ORDR.SlpCode = 67
  26. GROUP BY
  27. ORDR.DocNum, ORDR.CardCode, ORDR.CardName, ORDR.SlpCode,
  28. OSLP.SlpName, OITM.U_Product_Type

结果和我的要求如下,

pprl5pva

pprl5pva1#

你可以用 STUFF() 如下所示。只要替换一下 cte 你的原始查询。另一种方法是用当前结果创建临时表并替换它 cte 使用新创建的临时表。

  1. SELECT DoNum
  2. , CardCode
  3. , CardName
  4. , SipCode
  5. , SlpName
  6. , STUFF((SELECT DISTINCT ',' + CONVERT(VARCHAR,U_Product_Type)
  7. FROM [cte] t1
  8. WHERE (DoNum = cte.DoNum
  9. and CardCode = t1.CardCode
  10. and CardName = t1.CardName
  11. and SipCode = t1.SipCode
  12. and SlpName = t1.SlpName)
  13. FOR XML PATH ('')), 1, 2, '') AS U_Product_Type
  14. ,sum(LineTotal) as LineTotal
  15. ,sum(dwpnt) as dwpnt
  16. FROM cte
  17. group by DoNum
  18. , CardCode
  19. , CardName
  20. , SipCode
  21. , SlpName

现场演示

展开查看全部

相关问题