sql - 非规范化 SQL 查询和组合列

标签 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

输出如下所示:
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

我需要的是:
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

这是输入到 3rd 方软件应用程序所必需的。我不太确定如何正确地对这些信息进行非规范化。 PIVOT 函数会这样做吗?

最佳答案

MySQL 有一个名为 GROUP_CONCAT 的就绪函数。 !

它看起来像这样:

SELECT 
 AccountNumber
,AdmitDate
,SUM(TotalCharges)
,GROUP_CONCAT(CPTCode)
,GROUP_CONCAT(ItemCharges)
FROM tbl
WHERE condition
GROUP BY AccountNumber, AdmitDate

关于sql - 非规范化 SQL 查询和组合列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14984706/

相关文章:

sql - Postgres添加身份导致ERROR START值(0)不能小于MINVALUE(1)

mysql - 如果提供嵌套子查询,查询不会被执行

database - 反规范化以何种方式提高数据库性能?

database - 具有函数依赖性的 1NF 范式

database - 使用非规范化数据库表分析数据

sql - 如何完全删除身份

java - 使用 Hibernate 定义两种数据源 - 一种是关系型数据源,一种是 NoSQL 数据源

nosql - NoSQL 士气低落

mysql数据库链表反规范化

c# - 插入/更新大量记录 SQL Server