gpt4 book ai didi

sql - "Pivoting"SQL 中的表(即交叉制表/crosstabulation)

转载 作者:太空狗 更新时间:2023-10-30 01:55:19 25 4
gpt4 key购买 nike

我正在尝试从几个数据库表生成报告。简化版看起来像这样

Campaign
----------
CampaignID

Source
-----------------------
Source_ID | Campaign_ID

Content
---------------------------------------------------------
Content_ID | Campaign_ID | Content_Row_ID | Content_Value

报告需要这样读:

CampaignID - SourceID - ContentRowID(Value(A)) - ContentRowID(Value(B))

其中 ContentRowID(Value(A)) 表示“查找具有给定 CampaignID 和 ContentRowId 为“A”的行,然后获取该行的 ContentValue”

基本上,我必须将行“旋转”(我认为这是正确的术语)成列...

这是一个 Oracle 10g 数据库...

有什么建议吗?

最佳答案

Bill Karwin 提到了这一点,但我认为这一点值得非常清楚地指出:

SQL 不会执行您要求的操作,因此您获得的任何“解决方案”都将是一个问题。

如果您知道,可以肯定的是,它总是会在 Oracle 10 上运行,那么可以肯定的是,Walter Mitty 的交叉制表可以做到这一点。正确的方法是在查询和应用程序代码中使用最简单的排序顺序组合以正确布局。

  • 它适用于其他数据库系统,
  • 它不会冒任何其他层崩溃的风险(我记得 MySQL 有一个问题,例如 >255 列。你确定你的接口(interface)库和数据库本身一样好吗?)
  • (通常)并没有那么难。

如果需要,您可以索取 Content_Row_ID首先,然后询问您需要的任何行,按 CampaignID 排序, ContentRowID ,这将按照从左到右的逐行顺序为您提供每个(填充的)单元格。


附言。

有很多现代人认为 SQL 应该拥有/做的事情,但实际上并不存在。这是一个,生成的范围是另一个,递归闭包,参数 ORDER BY ,标准化的编程语言……这个例子不胜枚举。 (虽然,不可否认,ORDER BY 有一个技巧)

关于sql - "Pivoting"SQL 中的表(即交叉制表/crosstabulation),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/213476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com