2012-08-10 55 views
1

我有如下表:替换一个SQL表中的列,这是内的JOIN结果

CodeName cnt    cnt 
CodeNAmeA 1111   2222 
CodeNAmeB 3333   4444 
CodeNAmeC 5555   6666 

此表下面的查询结果:

(select a.CodeName, a.cnt, b.cnt from 

    (select tableA.CodeName, count(*) cnt 
    from aaaa..AAAA tableA inner join bbbb..BBBB tableB 
    on tableA.CodeName = tableB.CodeName 
    where XXXXXXX 
    group by tableA.CodeName) a 

    JOIN 

    (select tableA.CodeName, count(*) cnt 
    from aaaa..AAAA tableA inner join bbbb..BBBB tableB 
    on tableA.CodeName = tableB.CodeName 
    where XXXXXXX 
    group by tableA.CodeName,tableA.INAMALOCK) b 

ON a.CodeName = b.CodeName) 

我还有一个表是这样的:

CodeName  RealName 
CodeNAmeA  RealNameA 
CodeNAmeB  RealNameB 
CodeNAmeC  RealNAmeC 

此表是一个简单的选择查询的结果

select CodeName 
from TableCodeReal 

我想要做的是显示如下因素:

RealName cnt  cnt 
RealNameA 1111 2222 
RealNameB 3333 4444 
RealNameC 5555 6666 

的问题就来了,我不会在aaaa..AAAA或bbbb..BBBB有真实姓名,我该怎么办获得第一个查询的结果并进行替换?非常感谢,我对如何在第一个查询中集成第二个表格感到非常困惑。

回答

2

我相信这是你需要的。 使您的主要查询成为子查询,并将其加入您的第二张表CodeName值。然后从第二个表格中选择RealName,以及您的cnt值(我的别名为acntbcnt)。

SELECT T.RealName, Q.acnt, Q.bcnt 
FROM 
(select a.CodeName, a.cnt as acnt, b.cnt as bcnt from 

    (select tableA.CodeName, count(*) cnt 
    from aaaa..AAAA tableA inner join bbbb..BBBB tableB 
    on tableA.CodeName = tableB.CodeName 
    where XXXXXXX 
    group by tableA.CodeName) a 

    JOIN 

    (select tableA.CodeName, count(*) cnt 
    from aaaa..AAAA tableA inner join bbbb..BBBB tableB 
    on tableA.CodeName = tableB.CodeName 
    where XXXXXXX 
    group by tableA.CodeName,tableA.INAMALOCK) b 

ON a.CodeName = b.CodeName) Q 
INNER JOIN TableCodeReal T ON Q.CodeName = T.CodeName 
0

您可以将第一个记录集视为虚拟表。加入记录集给你第二个表,你可以得到你想要的结果。

select rt.RealName, vt.cnta, vt.cntb 
from TableCodeReal rt 
inner join 
(select a.CodeName, a.cnt as cnta, b.cnt as cntb from 

    (select tableA.CodeName, count(*) cnt 
    from aaaa..AAAA tableA inner join bbbb..BBBB tableB 
    on tableA.CodeName = tableB.CodeName 
    where XXXXXXX 
    group by tableA.CodeName) a 

    JOIN 

    (select tableA.CodeName, count(*) cnt 
    from aaaa..AAAA tableA inner join bbbb..BBBB tableB 
    on tableA.CodeName = tableB.CodeName 
    where XXXXXXX 
    group by tableA.CodeName,tableA.INAMALOCK) b 

ON a.CodeName = b.CodeName) vt on vt.CodeName = rt.CodeName 
+0

嗨!,您的查询与Alex Tyman非常相似,但他的查询和您的查询都不起作用。你能解释一下你和Alex的其他答案吗? – Eduardo 2012-08-10 10:19:53

+0

@Eduardo我可以看到的唯一区别是,当它应该是'rt'时,他用来获取'RealName'值的表别名是'cr'。可能只是一个错字! – XN16 2012-08-10 10:22:13

+0

这是一个错字。抱歉 – codingguy3000 2012-08-10 14:06:05

相关问题