应用包装两个select语句的外层

时间:2013-09-27 08:17:15

标签: sql-server join

我有两个成功内连接的查询

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
)

3 个答案:

答案 0 :(得分: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

希望它能帮助像我这样的新手

答案 1 :(得分:0)

好的,到目前为止,您已经选择了您的第一个选择生成的所有内容(有点无用,但是您想要的开始;)

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

答案 2 :(得分:0)

我没有任何样本数据来测试这个,所以可以继续你的代码。 您对t1&的查询t2看起来完全相同 - 你为什么不做一个总和&算一步?

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的习惯。