- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试从几个数据库表生成报告。简化版看起来像这样
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 的交叉制表可以做到这一点。正确的方法是在查询和应用程序代码中使用最简单的排序顺序组合以正确布局。
如果需要,您可以索取 Content_Row_ID
首先,然后询问您需要的任何行,按 CampaignID
排序, ContentRowID
,这将按照从左到右的逐行顺序为您提供每个(填充的)单元格。
附言。
有很多现代人认为 SQL 应该拥有/做的事情,但实际上并不存在。这是一个,生成的范围是另一个,递归闭包,参数 ORDER BY
,标准化的编程语言……这个例子不胜枚举。 (虽然,不可否认,ORDER BY
有一个技巧)
关于sql - "Pivoting"SQL 中的表(即交叉制表/crosstabulation),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/213476/
我正在尝试从几个数据库表生成报告。简化版看起来像这样 Campaign ---------- CampaignID Source ----------------------- Source_ID |
我是一名优秀的程序员,十分优秀!