0

我有两张桌子rawtabletradetable

未加工的

rawid companyname uniqueID 
1      AAA-XA         9CV
2      BBB-DEMO       10K
3      CCC-XOXO       7D

交易台

tradeid securityname CUSIP
1       AAACOMP      9CV
2       BBBCOMP      10K

现在我需要的是companynamefromrawtable有点混,所以我需要securitynamefromtradetable作为公司名称,因为我使用了 LEFT JOIN

declare DataSourceId = 3;
SELECT DISTINCT
    @DataSourceId,
    dbo.CleanText(tradetable.securityname)
FROM    tradetable 
    LEFT JOIN
    (
        SELECT DISTINCT 
            companyname,
            uniqueID 
        FROM
            rawtable 
    ) rawtable ON tradetable.cusip =  rawtable. uniqueID 

这会给我namesfromtradetable但在这里我会错过新的不匹配的名称rawtable但我也想要这些名称但在 select 语句中

如果我使用

declare DataSourceId = 3;
SELECT DISTINCT
        @DataSourceId,
        dbo.CleanText(rawtable.securityname) --instead of tradetable 

那么我会选择错误的混合名称

那么我该如何解决这个问题呢?或从其他地方我需要按照我的意愿执行正确的名称tradetable securityname

我预期的输出:

未加工的

companyname uniqueID 
AAA-XA         9CV
BBB-DEMO       10K
CCC-XOXO       7D

交易台

securityname CUSIP
AAACOMP      9CV
BBBCOMP      10K

我想要一个格式正确的securitynamecompanyname我正在检查uniqueID 它是否匹配然后它将securitynametradetable

现在

当有一个附加记录时,它的实际名称可能是rawtable这样的,我应该从它出现在第三张表中的地方取它,还是有其他方法?CCC_XOXOCCCCCCCCC

意味着我也需要在我的 JOIN 中导入第三个表,对吗?

4

1 回答 1

1

你的意思是你想从中获取价值tradetable,如果它不存在,从rawtable? 像这样(sqlfiddle)?

SELECT dbo.CleanText(COALESCE(t.securityname,r.companyname)) AS companyname,
    COALESCE(t.CUSIP,r.uniqueID) AS uniqueID
FROM rawtable r
LEFT OUTER JOIN tradetable t ON r.uniqueID = t.CUSIP

输出是:

公司名称唯一
AAACOMP 简历
BBBCOMP 10K
CCC-XOXO 7D
于 2012-07-27T18:24:06.173 回答