我有一個 sql 查詢,它明確地尋找“活動”專案(108)并過濾掉“非活動”專案(117)。
雖然,我發現當我嘗試運行此查詢并搜索非活動專案時,當然沒有任何回傳,因為我們已經說過WHERE COALESCE(i.item_status_id, 108) <> 117
這是原始的sql:
SELECT st.scope_type,
COALESCE(Sum(0 1), 0)
FROM scope_inventory_view i
INNER JOIN security y
ON y.security_id = i.update_user
INNER JOIN product_info vp
ON vp.product_id = i.product_id
INNER JOIN hl_vendorproduct hvp
ON hvp.product_id = i.product_id
INNER JOIN hl_scopetype st
ON st.scope_type_id = i.scope_type_id
INNER JOIN hl_itemstatus ist
ON ist.item_status_id = COALESCE(i.item_status_id, 108)
LEFT JOIN hl_owner o
ON o.owner_id = i.owner_id
LEFT JOIN hl_location l
ON l.location_id = i.location_id
LEFT JOIN hl_locationtype lt
ON lt.location_type_id = l.location_type_id
LEFT JOIN hl_sterilizerload sl
ON sl.load_id = i.load_id
LEFT JOIN hl_facility f
ON f.facility_id = l.facility_id
LEFT JOIN clientoption co
ON co.parent_option_id = 271
AND ( co.facility_id = f.facility_id
OR co.facility_id IS NULL )
LEFT JOIN clientoption clo
ON clo.option_id = 271
AND ( clo.facility_id = f.facility_id
OR clo.facility_id IS NULL ),
gl_client
WHERE COALESCE(i.item_status_id, 108) <> 117
GROUP BY st.scope_type WITH rollup
有沒有更好的方法來寫這個,以便過濾掉狀態 117 專案,除非用戶請求它們?如果他們這樣做,sql查詢會像這樣結束:(沒有結果)
WHERE COALESCE(i.item_status_id, 108) <> 117
AND ( ist.item_status_id IN( '117' ) )
GROUP BY st.scope_type WITH rollup
任何幫助表示贊賞!
uj5u.com熱心網友回復:
您的查詢有很多未在 select 或 where 條件中使用的表和連接。也許你已經為這個問題簡化了它?如果不消除連接中的冗余表。
對于您包含或排除117的問題,我建議您在您的中添加以下列SELECT,并在中添加相同的運算式GROUP BY。
CASE WHEN 117 THEN '117' ELSE 'others' END AS type_group
最終使用將顯示為每個數字的 2 個數字,scope_type無論是在代碼中還是由使用資料的人(如果他們希望包含型別 117)都可以添加在一起。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/441799.html
