我有兩個表,Kurv和Kurvtilmeldingsvalg。Kurvtilmeldingsvalg中的每條記錄都包含一個指向Kurv中某條記錄的外鍵。然而,當Kurv第一次被創建時,Kurvtilmeldingsvalg中的行還不存在。
我有一個腳本,它根據Kurvtilmeldingsvalg中的一些值來計算一個數字。但是,如果該表中的某一行還不存在,那么計算結果應該回傳 0。
目前,我正在使用 CASE WHEN 條件來計算正確的總和。然而,這并沒有考慮到Kurvtilmeldingsvalg表中不存在的行。
SELECT Kurv.Id AS KurvID,
ISNULL(SUM(CASE)
WHEN KurvTilmeldingsvalg.Antal - KurvTilmeldingsvalg。 OriginalAntalSolgte < 0 THEN 0
ELSE (KurvTilmeldingsvalg.Antal - KurvTilmeldingsvalg.OriginalAntalSolgte)
END * nc_valglinjeBase.nc_deltageroptaelling), 1) AS TotalAntal
FROM Kurv
LEFT JOIN KurvTilmeldingsvalg ON Kurv.Id = KurvTilmeldingsvalg.KurvId
LEFT JOIN nc_valglinjeBase ON KurvTilmeldingsvalg.Valglinje = nc_valglinjeBase.nc_valglinjeId
WHERE Kurv.Status in(0,
1,
2,
13/*,14*/)
GROUP BY Kurv.Id
ORDER BY TotalAntalDESC
我試圖通過在WHEN子句中做一個子查詢來解決這個問題:
WHEN (Select Count(*) FROM Kurvtilmeldingsvalg INNER JOIN Kurv ON Kurvtilmeldingsvalg. KurvId = Kurv.Id) = 0 THEN 0
然而,我得到一個錯誤,資訊如下。"不能在包含聚合或子查詢的運算式上執行聚合函式"
。當前不正確的輸出:
期望的輸出將回傳0而不是1。這個例子中的Kurv沒有被Kurvtilmeldingsvalg中的任何行所參考。
當Kurvtilmeldingsvalg表中沒有參考Kurv中的行時,我怎樣才能回傳0?
uj5u.com熱心網友回復:
我做了這個超快的作業,并根據我認為你要做的事情,盡我所能地填補了空白。
create table kurv (id int, [status] int)
創建 表 kurvtilmeldingsvalg (kurvid int, 反義詞int, 原義詞int, 代詞int)
創建 表 nc_valglinjebase (nc_valglinjeid int, nc_deltageroptaelling int)
insert into kurv values (1,1)
insert into kurv values (2,0)
insert into kurv values (3,1)
insert into kurv values (4,2)
insert into kurv values (5,13)
insert into kurvtilmeldingsvalg values (1, 29,13,101)
insert into kurvtilmeldingsvalg values (2, 9,3, 101)
insert into kurvtilmeldingsvalg values (3, 2,1, 102)
insert into kurvtilmeldingsvalg values (3, 44,20, 102)
insert into kurvtilmeldingsvalg values (2, 30,11, 103)
insert into nc_valglinjebase values (101,3)。
insert into nc_valglinjebase values (102,8)
insert into nc_valglinjebase values (103,5)
select a.id as kurvid
, case
when not exists (select 1 from kurvtilmeldingsvalg d where a. id = d.kurvid) then 0.
else isnull(sum(case when b.antal - b. originalantalsolgte < 0 then 0 else b. - b.originalantalsolgte end * c.nc_deltageroptaelling),1)
end as totalantal
from kurv a
left join kurvtilmeldingsvalg b on a.id = b.kurvid
left join nc_valglinjebase c on b.valglinje= c.nc_valglinjeid
where a.status in (0, 1, 2, 13)
group by a.id
order by totalantal desc
drop table kurv
drop table kurvtilmeldingsvalg
drop table nc_valglinjebase
tldr; 我只是用EXISTS來檢查是否有匹配的行,然后再檢查NULL。
它的結果是:
kurvid totalantal
-----------
3200
2113
1 48
4 0
5 0
id 4和5在kurvtilmeldingsvalg表中沒有任何匹配的行,所以它們的結果是0而不是1
。轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/311083.html
標籤:
上一篇:如何在客戶ID為6位數和7位數的"客戶ID"列(INT資料型別)前添加'00'?
下一篇:區塊鏈技術——框架&基本原型

