Mysql 我想结合两个sql查询

Mysql 我想结合两个sql查询,mysql,sql,nested-queries,Mysql,Sql,Nested Queries,我想结合两个查询结果和两个查询的最终结果显示 我试着和工会合作,但没有成功 Select Distinct PersonNameWorked, COUNT(ProcessInstanceAppianId)as Num_Of_Jobs, sum(ExpectedTaskEffort) as Workunits, cast((cast((sum(TaskInstanceEffort) / 60.00) as Decimal(5,2)))/count (Distinct cast(TaskInst

我想结合两个查询结果和两个查询的最终结果显示

我试着和工会合作,但没有成功

Select Distinct PersonNameWorked, COUNT(ProcessInstanceAppianId)as Num_Of_Jobs,  sum(ExpectedTaskEffort) as Workunits,
cast((cast((sum(TaskInstanceEffort) / 60.00) as Decimal(5,2)))/count (Distinct  cast(TaskInstanceCompleted as date) ) as Decimal(5,2)) as WorkingHours,
ROUND((1.00- sum(CAST(TaskInstanceEffort AS FLOAT))/sum(CAST(ExpectedTaskEffort AS FLOAT)))*100,2) as EfforVariance
from pathfinder..PFTask

where TaskInstanceCompleted  between '2019-9-03 00:30:00' and '2019-9-04 00:30:00'
  and KeyProcessStream in (26769,26768,28788,26760,26761,26755,29529)
and KeyPerson in (1347718,1332622,619682)
--and ProcessInstanceAppianId='-2136985491'
--and TaskInstanceCompleted
group by PersonNameWorked, KEYPERSON
order by PersonNameWorked asc
union all
select PersonNameWorked, cast(sum(PFTaskInstanceRating)*1.00/count(distinct ProcessInstanceAppianId) as decimal (5,2))as Rating
from pathfinder..PFTask
where TaskInstanceCompleted  between '2019-9-03 00:30:00' and '2019-9-04 00:30:00'
and KeyPerson in (1347718,1332622,619682)
and PFTaskInstanceRating is not null
group by PersonNameWorked, KEYPERSON
order by PersonNameWorked asc 
味精156,第15级,状态1,第17行
关键字“union”附近的语法不正确。

对于
union all/union
,您需要在两个查询中具有相同的列数,这两个查询在您的情况下都会丢失,因此会引发错误

Select Distinct PersonNameWorked, COUNT(ProcessInstanceAppianId)as Num_Of_Jobs,  sum(ExpectedTaskEffort) as Workunits,
cast((cast((sum(TaskInstanceEffort) / 60.00) as Decimal(5,2)))/count (Distinct  cast(TaskInstanceCompleted as date) ) as Decimal(5,2)) as WorkingHours,
ROUND((1.00- sum(CAST(TaskInstanceEffort AS FLOAT))/sum(CAST(ExpectedTaskEffort AS FLOAT)))*100,2) as EfforVariance
from pathfinder..PFTask
where TaskInstanceCompleted  between '2019-9-03 00:30:00' and '2019-9-04 00:30:00'
  and KeyProcessStream in (26769,26768,28788,26760,26761,26755,29529)
and KeyPerson in (1347718,1332622,619682)
--and ProcessInstanceAppianId='-2136985491'
--and TaskInstanceCompleted
group by PersonNameWorked, KEYPERSON

union all

select PersonNameWorked, null,null,null,cast(sum(PFTaskInstanceRating)*1.00/count(distinct ProcessInstanceAppianId) as decimal (5,2))as Rating
from pathfinder..PFTask
where TaskInstanceCompleted  between '2019-9-03 00:30:00' and '2019-9-04 00:30:00'
and KeyPerson in (1347718,1332622,619682)
and PFTaskInstanceRating is not null
group by PersonNameWorked, KEYPERSON

作为对fa06s答案的补充,由于他提出了一个非常好的观点,即两个查询之间的列计数必须相等,因此此错误是由于您尝试按每个查询排序,然后执行并集:

SELECT a FROM table1
UNION 
SELECT b FROM table2
UNION 
SELECT c FROM table3
ORDER BY a            <--the column is named after whatever the first query called it

在合并之前,不能按每个查询排序。在所有工会结束后,你一次完成命令

对:

SELECT.. 
FROM ... 
UNION 
SELECT ... 
FROM ... 
ORDER BY ... <-- just order by once. It works on the whole union output
删除ORDER BY后,您将面临有关列计数的错误:

联合的查询必须具有相同的列数,因为结果集垂直地粘在一起:查询1上的5列必须与查询2上的5列匹配,以便查询1中的50行和查询2中的100行可以成为一个150行长的结果集

如果查询2中的某些列没有任何值,请将其设为null:

  SELECT 1 as a, 2 as b
  UNION 
  SELECT 2, null         <-- there are no values for column b for this query,
                             so just use a constant value like 0, 1, null..
                             whatever is appropriate
  ORDER BY a
选择1作为a,选择2作为b
联合

SELECT 2,null通常按与所选列相同的列进行分组,但作为设置函数参数的列除外。查询中只能有一个order BY子句包含union all。删除第一个order by子句。您几乎不需要将GROUP by与SELECT DISTINCT组合在一起。SQL Server的标记为
SQL Server
,并且还存在版本标记。请在以后的所有问题中使用
sql server
标记加上版本标记,如
sql-server-2017
mysql
tag是针对oracle corporation的一款具有不同语法的竞争产品的,上面的查询有效,但结果与预期不符,所以基本上我的问题是,我想要两个查询的结果,但最终结果包含,PersonNameWorked,工作数量,工作单位,工作时间,EfforVariance and Rating@FA06您已经删除了
ORDER BY
您可能想提及的是,错误消息是由于尝试在union之前订购而引起的,而不是因为列数不同。那将是另一个错误message@RiggsFolly,联合订货有时并不像我们所做的那样有效think@fa06我知道,我只是在UVing之后建议你告诉OP你为什么要删除它:)@fa06忠实地承诺它会;看看我刚才添加到答案中的屏幕截图。当然,OP标记为
mysql
并使用
sqlserver
,这并没有帮助,mysql可能会接受各种类似的****ty行为。。但是OP肯定在使用sqls;这不是mysql错误消息
SELECT * FROM
(
  SELECT a 
  UNION 
  SELECT b 
  UNION 
  SELECT c  
) x
ORDER BY x.a
  SELECT 1 as a, 2 as b
  UNION 
  SELECT 2, null         <-- there are no values for column b for this query,
                             so just use a constant value like 0, 1, null..
                             whatever is appropriate
  ORDER BY a