对SQL查询进行非规范化并组合列

ajs*_*iff 4 sql denormalization

我有一个查询,我需要以一种有趣的方式反规范化.

这是来源:

SELECT
  BILL_Invoice.Invoice_Number as AccountNumber,
  replace(convert(varchar(10), dbo.BILL_Invoice.Invoice_Date,101) ,'/','') as AdmitDate,
  BILL_InvoiceCPT.InvoiceCPT_Code AS CPTCode,
  InvoiceCPT_FeeAmount as ItemCharge
FROM
  dbo.BILL_InvoiceCPT 
  LEFT JOIN dbo.BILL_Invoice
  ON dbo.BILL_InvoiceCPT.Invoice_ID = dbo.BILL_Invoice.Invoice_ID
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

AccountNumber | AdmitDate  | CPTCode | ItemCharge
38689         | 02192013   | 99213   |     110.00
38689         | 02192013   | 80053   |       0.00
38689         | 02192013   | 86361   |       0.00
38689         | 02192013   | 85025   |       0.00
38689         | 02192013   | 87536   |       0.00
38689         | 02192013   | 93000   |      25.00
Run Code Online (Sandbox Code Playgroud)

我需要的是:

AccountNumber | AdmitDate | TotalCharges | CPTCodes                            | ItemCharges
38689         | 02192013  | 135.00       | 99213;80053;86361;85025;87536;93000 | 110.00;0.00;0.00;0.00;0.00;25.00
Run Code Online (Sandbox Code Playgroud)

这是输入第三方软件应用程序所必需的.我不确定如何正确地反规范化这些信息.PIVOT功能会这样做吗?

May*_*ani 5

MySQL有一个就绪函数叫做GROUP_CONCAT!

它看起来像这样:

SELECT 
 AccountNumber
,AdmitDate
,SUM(TotalCharges)
,GROUP_CONCAT(CPTCode)
,GROUP_CONCAT(ItemCharges)
FROM tbl
WHERE condition
GROUP BY AccountNumber, AdmitDate
Run Code Online (Sandbox Code Playgroud)