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
)
4

3 回答 3

2

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

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

希望对像我这样的新手有所帮助

于 2013-09-27T08:22:21.573 回答
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 中的 Common Table Expressions。在 SQL 2005 之前,您必须在...内的查询中编写这些复杂的查询。现在就养成使用 CTE 的习惯。

于 2013-09-27T09:10:07.107 回答
0

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

SELECT CASE 
WHEN countresult=sumresult THEN 'Equal'
ELSE 'Not'
END
FROM ( --your join select --
)
于 2013-09-27T08:29:19.720 回答