【问题标题】:SQL Query: Combine multiple rows into a single rowSQL查询:将多行合并为一行
【发布时间】:2021-05-01 18:52:02
【问题描述】:

SQL Server 2016

我正在尝试查询一组事件注册数据并按日期获取单个记录的同一行中的所有项目。

我有一个个人名单,上面有姓名和 ID,以及活动代码、活动标题和日期,如下所示。

ID Name EventDate ProductCode ProductName
123 Jayson 2/1/2021 PROD1 Class 1
123 Jayson 2/1/2021 PROD2 Class 2

我想要的最终结果是

ID Name EventDate ProductCode1 ProductName1 ProductCode2 ProductName2
123 Jayson 2/1/2021 PROD1 Class 1 PROD2 Class 2

这需要按 ID 和日期分组,以便我可以按日期提取个人在该日期购买的所有产品的报告,并且这需要可扩展,因为有些人有 1 次购买,而其他人有5 次购买。

这可能吗?

【问题讨论】:

  • 请向我们展示您的尝试。并阐明您需要处理多少个可能的产品代码和名称?你可能想要PIVOT
  • 嗯,这就是问题所在,我什至不知道该怎么做。我在网上找到了一些代码,向我展示了如何使用事件之间的分隔符创建包含所有记录的单列,但我需要为每个列单独列出。尽可能需要产品代码?可能每个日期最多 20 个,但这是一个开放的位置,因为这是按事件进行的,这取决于一个事件有多少个分组讨论来进行注册。
  • 这是 SSRS、Crystal Reports 或 Excel 或类似的工作,特别是如果您的要求是“这需要可扩展”。
  • 好的,完美。我们的想法是将其放入 SSRS 中。如果是这种情况,我是否应该使用我找到的用于分隔符的代码,然后让 SSRS 将其解析为列?
  • 不,使用矩阵是 SSRS,它将为您完成工作。只需拉取查询中的行。

标签: sql sql-server tsql pivot


【解决方案1】:

你可以这样做:

SELECT a.*, b.ProductCode, b.ProductName from table1 a
LEFT JOIN table2 b ON (a.ID=b.ID)

【讨论】:

    猜你喜欢
    • 2011-12-21
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多