1
我在嘗試將MS-Access查詢轉換爲postgres語句,以便我可以在SSRS中使用它。似乎工作很好,除了IIF聲明。IIF in postgres
SELECT labor_sort_1.ncm_id
,IIf(labor_sort_1.sortby_employeeid = 3721
, ((labor_sort_1.MaxUpdatedAt - labor_sort_1.MinNCMScanTime) * 24 * 29 * labor_sort_1.number_of_ops)
, IIf(labor_sort_1.sortby_employeeid = 3722
, ((labor_sort_1.MaxUpdatedAt - labor_sort_1.MinNCMScanTime) * 24 * 24 * labor_sort_1.number_of_ops)
, IIf(labor_sort_1.sortby_employeeid = 3755, ((labor_sort_1.MaxUpdatedAt - labor_sort_1.MinNCMScanTime) * 24 * 24 * labor_sort_1.number_of_ops)
, ((labor_sort_1.MaxUpdatedAt - labor_sort_1.MinNCMScanTime) * 24 * 17 * labor_sort_1.number_of_ops)))) AS labor_cost
FROM
(SELECT
ls_sort.ncm_id
, ls_sort.computer_name
, ls_sort.number_of_ops
, ls_sort.badge_scan_time
, ls_sort.sortby_employeeid
, Min(ls_sort.ncm_scan_time) AS MinNCMScanTime
, Max(ls_sort.updated_at) AS MaxUpdatedAt
FROM stone.ls_sort
INNER JOIN stone.ls ON ls_sort.ls_id = ls.ls_id
WHERE 1=1
AND ls_sort.created_at Between current_date-1 And current_date
GROUP BY ls_sort.ncm_id
, ls_sort.computer_name
, ls_sort.number_of_ops
, ls_sort.badge_scan_time
, ls_sort.sortby_employeeid
ORDER BY ls_sort.computer_name) AS labor_sort_1
它返回以下消息 function iif(boolean, interval, interval) does not exist
我將如何解決這個問題?
非常棒的建議+1並標記爲答案,但是。有沒有辦法在postgres中創建函數pg_temp函數,其行爲與ms訪問中的iif行爲相同? (對於我的老闆) –
我不熟悉postgres的功能來說這是否可能。我認爲這將是,但我會避免這樣做的原因有兩個:1)iif()對於RDBMSs來說是一個古怪的球。每個在陽光下的RDBMS都使用CASE。爲了讓你的SQL更加標準化,切換到CASE將是一個好主意。 2)我敢打賭,UDF會比RDBMS邏輯中深陷於CASE的東西慢。 – JNevill
非常感謝。我做了一些調整,現在它正在生產中。 –