我正在為一個簡單的查詢而苦惱,我想。
我有兩個表,單位和事件。 我的第一個查詢是:
select u.unit, u.group, e.zone
from units u
left join event e
on u.id = e.id
where u.ag_id = 'FIRE'/span> and u. numbr = 'G0182' and u.status >/span> 1
其中的結果是:
Unit | Group | Zone
M1 44G 8
M2 50F 7
然后我運行另一個查詢,以確定每組共有多少個單位是活躍的:
select count(1) from units where group = '[result]' and status > 1
其中[result]是第一個查詢的組輸出(44G,50F等)
我想在我的第一個查詢中添加第四列,只是添加該行的總數,像這樣:
我想在我的第一個查詢中添加第四列,只是添加該行的總數。
Unit | Group | Zone| Active
M1 44G 8 4
M2 50F 7 3
我怎樣才能將這些查詢串聯起來,在一條陳述句中完成?
謝謝!
uj5u.com熱心網友回復:
當你想讓一個SQL結果集變寬時,你可以使用一個JOIN
select u.unit, u.group, e.zone, x.tr
from units u
left join event e on u.id = e.id
INNER JOIN(select group , count(*) as ctr from units where status > 1 GROUP by group) X ON X.group = u.group
where u.ag_id = 'FIRE'/span> and u. numbr = 'G0182' and u.status >/span> 1
在我看來,第一個查詢將排除你后來想要計算的專案(由于其where子句)。這意味著你帶著你的新要求(where status > 1)回到源資料中,將它們分組并計入一個單獨的結果,然后你將其作為一個子查詢并加入其中。
請記住,表可以在查詢中多次出現;表只是一個資料塊,就像select的輸出一樣。SQL服務器將資料塊連接到其他資料塊,它并不關心它是一個表還是由查詢的輸出形成的。
為了使資料塊更寬--JOIN,更高--UNION,更短--WHERE,更窄--SELECT。大多數情況下,SQL是把資料塊切碎,然后再把它們粘在一起,做成不同形狀的矩形:D
uj5u.com熱心網友回復:
你可以使用視窗函式:
select u.unit, u.group, e.zone, u.cnt
from (select u.*,
sum(case when status > 1 then 1 else 0 end) over (partition by u.group) as cnt
from units u
) u left join
事件e
on u.id = e.id
where u.ag_id = 'FIRE'/span> and u. numbr = 'G0182' and u.status >/span> 1
uj5u.com熱心網友回復:
SELECT *
from
(SELECT u.unit,
u.group,
e.zone,
count(u.group) over(partition BY u.group) active
FROM units u
LEFT JOIN 事件 e ON u.id = e.id
WHERE u.status > 1) uu
WHERE uu.ag_id = 'Fire'
and uu.numbr = 'G0182'
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/314820.html
標籤:
