Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中的并集与聚合_Sql_Sql Server_Union - Fatal编程技术网

SQL中的并集与聚合

SQL中的并集与聚合,sql,sql-server,union,Sql,Sql Server,Union,我有3个SQL查询,我想使用Union将它们合并到一个表中我尝试了不同的查询,但没有一个有效,我缺少什么 SELECT DISTINCT place.type AS type, COUNT(place.type)AS place, 0 AS msd, 0 AS county FROM place GROUP BY place.type; SELECT DISTINCT mcd.type, 0 AS

我有3个SQL查询,我想使用Union将它们合并到一个表中我尝试了不同的查询,但没有一个有效,我缺少什么

SELECT DISTINCT 
       place.type AS type, 
       COUNT(place.type)AS place,
       0 AS msd,
       0 AS county
FROM   place 
GROUP BY place.type;

SELECT DISTINCT 
       mcd.type, 
       0 AS place, 
       COUNT(mcd.type) AS msd, 
       0 AS county
FROM   mcd 
GROUP BY mcd.type;

SELECT DISTINCT 
       county.type, 
       0 AS place, 
       0 AS msd,
       COUNT(county.type) AS county
FROM   county 
GROUP BY county.type;

因此,最终输出将是方案(类型、地点、mcd、县)其中,type包含3个表中类型的所有不同值,place包含type值在place表中出现的次数,mcs和country的出现次数相同。

您需要一个外部查询来从三个查询组合中获取
type

下面是一个示例,使用UNION ALL set运算符组合三个查询的结果。该查询是一个内联视图,由外部查询引用,外部查询对类型列执行GROUP by,对计数/0列执行SUM AGGRATE

  SELECT t.type
       , SUM(t.place)
       , SUM(t.msd)
       , SUM(t.county)
    FROM ( SELECT place.type AS type
                , COUNT(place.type) AS place
                , 0 AS msd
                , 0 AS county
             FROM place
            GROUP BY place.type
            UNION ALL
           SELECT mcd.type
                , 0 AS place
                , COUNT(mcd.type) AS msd
                , 0 AS county
             FROM mcd
            GROUP BY mcd.type
            UNION ALL
           SELECT county.type
                , 0 AS place
                , 0 AS msd
                , COUNT(county.type) AS county
             FROM county
            GROUP BY county.type
         ) t
     GROUP BY t.type

对于每个查询中的
GROUPBY
子句,不需要DISTINCT关键字

将3个表连接在一起似乎更适合您的要求

SELECT coalese(place.type,mcd.type,conty.type) AS type, 
       COUNT(place.type)AS place,
       COUNT(mcd.type) AS msd, 
       COUNT(county.type) AS county
FROM   place 
FULL OUTER JOIN   mcd    ON place.type = mcd.type
FULL OUTER JOIN   county ON place.type = county.type 
GROUP BY coalese(place.type,mcd.type,conty.type)

您会收到什么错误消息?在查询之间添加
联合时有什么问题?我认为这应该行得通。但是,
不同的
不是必需的。