应用包装两个选择语句的外层



我有两个查询已成功内部连接

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
)

好吧,这个问题可以通过简单地为外层分配一个名称来解决。

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

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

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

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

我没有任何示例数据来测试这一点,所以可以继续你的代码。您对 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 的习惯。

最新更新