小编典典

在SQL中“透视”表(即交叉制表/交叉制表)

sql

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

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数据库…

有什么建议?


阅读 193

收藏
2021-03-17

共1个答案

小编典典

这是我的第一把刀。一旦我对Content表的内容有了更多的了解,就可以进行优化。

首先,您需要一个临时表:

CREATE TABLE pivot (count integer);
INSERT INTO pivot VALUES (1);
INSERT INTO pivot VALUES (2);

现在我们可以查询了。

SELECT campaignid, sourceid, a.contentvalue, b.contentvalue
FROM content a, content b, pivot, source
WHERE source.campaignid = content.campaignid
AND pivot = 1 AND a.contentrowid = 'A'
AND pivot = 2 AND b.contentrowid = 'B'
2021-03-17