为"CTE_YYYY"多次指定"xxxx"列

use*_*974 0 sql-server

我是Microsoft SQL Server的新手.我正在尝试连接两个具有名为CampaignIDusing的公用密钥的表LEFT OUTER JOIN.我需要在不同的查询中重用结果,所以我决定使用捕获结果集CTE_Results.例如,

-- This is my CTE script
WITH CTE_Results AS
(
  SELECT t1.CampaignID, t2.CampaignID, t1.Name, t2.Vendor
  FROM CampaignDetails AS t1
  LEFT OUTER JOIN CampaignOnlineDetails AS t2
  ON t1.CampaignID = t2.CampaignID
)

-- This is the script I want to use to compare the resulting table. For example,
SELECT Vendor
FROM CTE_Results
Run Code Online (Sandbox Code Playgroud)

但是,当我跑到上面时,我得到:

The column `CampaignID` was specified multiple times for `CTE_Results`. 
Run Code Online (Sandbox Code Playgroud)

通过阅读旧的StackOverflow问题和答案,似乎从CampaignID两个表中加入,我必须使用表别名来指定CampaignID我想要的(哪个表)SELECT.但我认为我做到了这一点,甚至看起来错误仍然存​​在.

有没有办法让我选择并保留我的CTE中的两个CampaignID?如果是这样,应该改变什么?谢谢你的答案!

Pரத*_*ீப் 5

CampaignID在CTE中选择了两次,使用不同alias name来解决问题

WITH CTE_Results
     AS (SELECT t1.CampaignID AS cd_CampaignID,
                t2.CampaignID AS cod_CampaignID,
                t1.NAME,
                t2.Vendor
         FROM   CampaignDetails AS t1
                LEFT OUTER JOIN CampaignOnlineDetails AS t2
                             ON t1.CampaignID = t2.CampaignID)
-- This is the script I want to use to compare the resulting table. For example,
SELECT Vendor
FROM   CTE_Results 
Run Code Online (Sandbox Code Playgroud)

或使用此

WITH CTE_Results(cd_CampaignID, cod_CampaignID, NAME, Vendor)
     AS (SELECT t1.CampaignID,
                t2.CampaignID,
                t1.NAME,
                t2.Vendor
         FROM   CampaignDetails AS t1
                LEFT OUTER JOIN CampaignOnlineDetails AS t2
                             ON t1.CampaignID = t2.CampaignID)
-- This is the script I want to use to compare the resulting table. For example,
SELECT Vendor
FROM   CTE_Results 
Run Code Online (Sandbox Code Playgroud)