我有两个查询已成功内部连接
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 的习惯。