2013-09-27 40 views
0

应用外层我有两个查询已成功内部联接是包装两个选择语句

select t1.countResult, t2.sumResult from (
    select 
     count(column) as countResult 
    from tableA join tableB 
    on tableA.id = tableB.id 
    group by name 
)t1 inner join ( 
    select 
     sum(column) as sumResult 
    from tableA 
    join tableB 
    on tableA.id = tableB.id 
    group by name 
)t2 
on t1.name= t2.name 

上面的查询将返回我的名字,并数和金额的相应数量。我需要在计数和总和之间进行比较。如果计数犯规匹配的总和,它会返回0,否则1。所以我的想法是实现另一个外层包裹他们和使用CASE WHEN。然而,我没有申请一个外层只是为了包装起来?这是我试过的:

select * from(
    select t1.countResult, t2.sumResult from (
     select 
      count(column) as countResult 
     from tableA join tableB 
     on tableA.id = tableB.id 
     group by name 
    )t1 inner join ( 
     select 
     sum(column) as sumResult 
     from tableA 
     join tableB 
     on tableA.id = tableB.id 
     group by name 
    )t2 
    on t1.name= t2.name 
) 

回答

1

好的问题可以通过简单地给外层分配一个名字来解决。

select * from(
select t1.countResult, t2.sumResult from (
    select 
     count(column) as countResult 
    from tableA join tableB 
    on tableA.id = tableB.id 
    group by name 
)t1 inner join ( 
    select 
    sum(column) as sumResult 
    from tableA 
    join tableB 
    on tableA.id = tableB.id 
    group by name 
)t2 
on t1.name= t2.name 
) as whatever //SQL Server need a name to wrap 

希望这将有助于任何新手和我一样

+0

这将只显示其中countresult = sumresult,使用的情况下,当一段时间,你可能想要的东西,以显示这两种记录的记录,但您实际显示取决于你的case语句的结果。 –

+0

不,它会列出该countResult和sumResult每个名字。我已经测试过,它工作正常。 –

+0

对。不知何故,我用countresult = sumresult混合了t1.name = t2.name。对不起'回合! –

0

好了,到目前为止,您已经选择的一切你的第一选择已经产生(有点没用的,但你想要的东西开始;))

SELECT CASE 
WHEN countresult=sumresult THEN 'Equal' 
ELSE 'Not' 
END 
FROM (--your join select -- 
) 
0

我没有任何样本数据来测试该这样可以去您的代码。 您查询的T1 T2 &外观是相同的 - 你为什么不只是做一个总和&计数1步?

SELECT COUNT(column) AS countResult 
,SUM(column) AS sumResult 
FROM tableA INNER JOIN tableB 
    ON tableA.id = tableB.id 
GROUP BY name 

另外,你提到你是一个福利局 - 在SQL Server上的公用表表达式阅读起来。 SQL 2005之前,你必须内... 获取查询中这些令人费解的查询写入到现在使用CTE的习惯。