我想连接两个表以获得如表4所示的输出。详情如下:
表1:销售数据
日期 | 平台ID | 已售单位 | 收入 | 频道ID |
---|---|---|---|---|
2024-07-01 | ABCD1 | 12 | 1200 | 1 |
2024-07-02 | ABCD1 | 11 | 1000 | 1 |
2024-07-01 | ABCD2 | 4 | 1200 | 2 |
2024-07-03 | ABCD3 | 42 | 9000 | 3 |
2024-07-03 | ABCD3 | 10 | 1000 | 2 |
表2:广告数据
日期 | 平台代码 | 广告支出 |
---|---|---|
2024-07-01 | 1A | 1000 |
2024-07-02 | 1A | 1500 |
2024-07-01 | 2B | 4000 |
2024-07-03 | 3C | 4200 |
表3:平台映射
平台ID | 平台代码 |
---|---|
ABCD1 | 1A |
ABCD2 | 2B |
ABCD3 | 3C |
所需输出(表4)
日期 | 平台ID | 已售单位 | 收入 | 频道ID | 广告支出 |
---|---|---|---|---|---|
2024-07-01 | ABCD1 | 12 | 1200 | 1 | 1000 |
2024-07-02 | ABCD1 | 11 | 1000 | 1 | 1500 |
2024-07-01 | ABCD2 | 4 | 1200 | 2 | 4000 |
2024-07-03 | ABCD3 | 32 | 9000 | 3 | 3200 |
2024-07-03 | ABCD3 | 10 | 1000 | 2 | 1000 |
这里,
AdSpend
是基于PlatformId
和Date
与表3和表2中的PlatformCode
连接起来的。
我尝试使用 CTE 编写以下查询,但它们没有按预期工作:
WITH AdSpendMapped AS (
SELECT
t1.date,
t1.platformid,
t1.UnitsSold,
t2.AdSpend
FROM SalesData t1
JOIN PlatformMapping t3 ON t1.platformid = t3.PlatformId
JOIN AdsData t2 ON t2.PlatformCode = t3.Platformcode AND t2.date = t1.date
),
TotalUnits AS (
SELECT
date,
platformid,
SUM(UnitsSold) AS TotalUnits
FROM SalesData
GROUP BY date, platformid
)
SELECT
a.date,
a.platformid,
a.UnitsSold,
a.Revenue,
a.ChannelId,
a.AdSpend
FROM AdSpendMapped a
JOIN TotalUnits t
ON a.date = t.date AND a.platformid = t.platformid;
我尝试使用 CTE 编写以下查询,但它们没有按预期工作
您的查询存在语法错误,因此“不起作用”显然意味着您在运行查询时收到错误消息。您应该告诉我们并向我们展示该消息。
在 CTE AdSpendMapped 中,您正确加入了表,但由于某种原因,您忘记选择 Revenue 和 ChannelId。稍后您尝试访问这些列,但它们不存在于您的 CTE AdSpendMapped 中。
出于我不明白的原因,您有另一个名为 TotalUnits 的 CTE,您可以在其中聚合 SalesData,每个日期和平台 ID 获取一行,但根据您的示例数据,该表无论如何每个日期和平台 ID 一行,因此整个聚合毫无意义。更重要的是,当您选择在查询中不使用的 TotalUnits 时,根据所需的输出表显然不需要它。
因此,所需的整个查询是带有两个添加列的 AdSpendMapped CTE:
SELECT
sd.date,
sd.platformid,
sd.UnitsSold,
sd.Revenue,
sd.ChannelId,
ad.AdSpend
FROM SalesData sd
JOIN PlatformMapping pm ON pm.platformid = sd.PlatformId
JOIN AdsData ad ON ad.PlatformCode = pm.Platformcode AND ad.date = sd.date