Sql server 尝试合并这两个查询

Sql server 尝试合并这两个查询,sql-server,Sql Server,我在尝试结合这两个简单的查询时遇到了最困难的情况(我对SQL和所有东西都相当陌生)。我已经尝试了多种方法来组合它们(sum case when…然后是1 else 0)并使用联接并尝试实现Exist,但仍然给了我一个错误 在任何情况下,我尝试组合的两个查询如下: Select Count (*) as TotalA, z.zname From CTable c, STable s, SLTable sl, ZTable z Where c.ID=s.sID and s.sID=sl.ID and

我在尝试结合这两个简单的查询时遇到了最困难的情况(我对SQL和所有东西都相当陌生)。我已经尝试了多种方法来组合它们(sum case when…然后是1 else 0)并使用联接并尝试实现Exist,但仍然给了我一个错误

在任何情况下,我尝试组合的两个查询如下:

Select
Count (*) as TotalA,
z.zname
From CTable c, STable s, SLTable sl, ZTable z
Where c.ID=s.sID
and s.sID=sl.ID
and sl.zID=z.zID
Group by z.zname
Order by z.zname

Select 
Count (*) as TotalB,
z.zname
From STable s, SLTable sl, ZTable z
Where s.sID=sl.sID
and sl.zID=z.zID
Group By z.zName
Order By z.zName
这是我尝试获取信息的一次尝试

Select 
Count (*) as TotalB,
sum (case when sl.sID=s.sID and sl.zID=z.zID then 1 else 0 end) as  TotalA,
z.zname
From STable s, SLTable sl, ZTable z, CTable c
Where s.sID=sl.sID
and sl.zID=z.zID
and c.sID=s.sID
Group By z.zname
Order By z.zname
这给了我三列Total A、Total B和Zname——但是Total A和Total B彼此完全相同——从第一个查询中获取所有正确的信息,然后将其复制到Total B区域

我确信我只是粗略地尝试将它们组合在一起,但我真的不知道如何将它们组合在一起


感谢您的帮助

以下内容如何:

SELECT COUNT(*) AS TotalA, 
(
  SELECT COUNT(*) as TotalB
  FROM STable ss
    INNER JOIN SLTable sssl ON ss.sID = sssl.sID 
    INNER JOIN ZTable sz ON sssl.zID = sz.zID
  WHERE sz.zname = z.zname 
) AS TotalB, z.zname
FROM CTable c
  INNER JOIN STable s ON c.ID = s.sID
  INNER JOIN SLTable sl ON s.sID = sl.ID 
  INNER JOIN ZTable z ON sl.zID = z.zID
GROUP BY z.zname

用CTE把它们砸碎怎么样

with

TableA as
(Select
Count (*) as TotalA,
z.zname
From CTable c, STable s, SLTable sl, ZTable z
Where c.ID=s.sID
and s.sID=sl.ID
and sl.zID=z.zID
Group by z.zname),

TableB as
(Select 
Count (*) as TotalB,
z.zname
From STable s, SLTable sl, ZTable z
Where s.sID=sl.sID
and sl.zID=z.zID
Group By z.zname)

/* --I've tested with this sample to avoid filling CTable,STable,SLTable,ZTable:
create table TableA(zname varchar(100),TotalA int)
create table TableB(zname varchar(100),TotalB int)
insert TableA(zname,TotalA) select 'a',10 union all select 'b',null
insert TableB(zname,TotalB) select 'a',20 union all select 'c',10 union all select 'd',50
select * from TableA
select * from TableB
*/

select COALESCE(TableA.zname,TableB.zname) as zname,TableA.TotalA,TableB.TotalB
from TableA full join TableB on TableA.zname=TableB.zname
如果您的SQL Server使用CTE非常旧,只需创建临时表并使用它们进行操作即可。像这个:

Select
    Count (*) as TotalA,
    z.zname
    into #TableA
    From CTable c, STable s, SLTable sl, ZTable z
    Where c.ID=s.sID
    and s.sID=sl.ID
    and sl.zID=z.zID
    Group by z.zname

下面是我如何回答这个问题的——通过一些研究——以及你们的累积答案:

SELECT
    ts.zname,
    TotalA ,
    TotalB
FROM
(
    Select
    Count (*) as TotalA,
    z.zname
    From CTable c, STable s, SLTable sl, ZTable z
    Where c.sID=s.sID
    and s.sID=sl.sID
    and sl.zID=z.zID
    Group by z.zname
) TC
INNER JOIN 
(
    Select 
    Count (*) as TotalB,
    z.zname
    From STable s, SLTable sl, ZTable z
    Where s.sID=sl.sID
    and sl.zID=z.zID
    Group By z.zname
) ts ON ts.zname = tc.zname
Order By ts.ZoneName

试着结合工会的结果:啊哈!这很有效!在这两个问题之间几乎形成了一个联盟。我现在唯一的问题是,我想用表A、表B和Zname显示三列。现在,添加union只会生成表A和Zname,第一行显示表B的结果,第二行显示表AA union的结果,这三列不会显示出来。是的,我知道-但没关系,我自己弄明白了。不确定z中的z是什么。Zname-:P,因为zname应该取自ZTable,也就是sztable,你是说在内部查询中找到的
z.zname
?如果是这样,它将内部查询链接到外部查询的记录。它会给你你想要的结果吗
sz.zname
必须链接到
z.zname
,才能获得正确的
TotalB