Sql server 应用包含两个select语句的外层
我有两个查询已成功内部联接Sql server 应用包含两个select语句的外层,sql-server,join,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
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。然而,我没有应用外层来包装它们?这就是我尝试过的:
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
希望它能对像我这样的新手有所帮助好的,到目前为止,你已经选择了你第一次选择所产生的一切(有点没用,但这是你想要的开始;)
我没有任何样本数据来测试这一点,所以可以继续你的代码。
您对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的习惯。这将只显示countresult=sumresult的记录,而在使用案例时,您可能希望同时显示这两种记录,但实际显示的内容取决于案例语句的结果。不,它将列出每个名称的countresult和sumresult。我已经测试过了,效果很好。不知怎的,我把t1.name=t2.name和countresult=sumresult弄混了。对不起!
SELECT COUNT(column) AS countResult
,SUM(column) AS sumResult
FROM tableA INNER JOIN tableB
ON tableA.id = tableB.id
GROUP BY name