簡體   English   中英

我想結合兩個 sql 查詢 resukt

[英]I want to combine two sql queries resukt

我想結合兩個查詢的查詢結果和最終結果顯示

我試過工會,但沒有用

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 答案的補充,因為他提出了一個非常好的觀點,即您的列數需要在兩個查詢之間相等,因此該錯誤是由您嘗試對每個查詢進行 ORDER BY 引起的,然后執行聯合:

在此處輸入圖片說明

在 UNION 之前,您不能按每個查詢 ORDER BY。 最后,在所有聯合之后,您執行 ORDER BY 一次。

對:

SELECT.. 
FROM ... 
UNION 
SELECT ... 
FROM ... 
ORDER BY ... <-- just order by once. It works on the whole union output

錯誤的:

SELECT.. 
FROM ...
ORDER BY ... <-- don't do it here as well
UNION 
SELECT ... 
FROM ... 
ORDER BY ...

ORDER BY 最后由 SQL 處理,在聯合完成后。 ORDER BY 使用聯合中第一個查詢定義的列名:

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
(
  SELECT a 
  UNION 
  SELECT b 
  UNION 
  SELECT c  
) x
ORDER BY x.a

刪除 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

還要注意,因為聯合中的第一個查詢定義了列名,所以在第二個查詢中為列設置別名的唯一目的是使代碼更具有自文檔性。 它沒有功能性目的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM