正在使用SQL Server。...
我从一个固定值开始,然后减去特定的小时数类型。我最终得到一些负数和一些正数。到目前为止,还不错,但是我需要的是如果值<= 0,那么我想将值设置为0,但语法不正确。任何帮助将不胜感激。
... ,36. - SUM(CASE WHEN P.PAYCODECATEGORYFK IN ('REG', 'ABU', 'PTO', 'LEAVE', 'HOL') THEN OTH_HRS ELSE 0 END) AS 'Unused Capacity'
110019000 7A Antepartum Unit Technician 09/04/2018 2018-09-02 5.6
110019000 7A Antepartum Unit Technician 09/11/2018 2018-09-09 -4
110019000 7A Antepartum Unit Technician 09/18/2018 2018-09-16 -3.25
110019000 7A Antepartum Unit Technician 09/25/2018 2018-09-23 3.5
110019000 7A Antepartum Unit Technician 10/02/2018 2018-09-30 13.38
110019000 7A Antepartum Unit Technician 10/09/2018 2018-10-07 3.75
110019000 7A Antepartum Unit Technician 10/16/2018 2018-10-14 -0.5
完整的SQL:
SELECT
ID [EmployeeID]
,DEPTNAME [Department]
,JOBTITLE [Job]
,CONVERT(VARCHAR(10),EARNS_END_DT,101) [Apply Date]
,DATEADD(DAY, 2 - DATEPART(WEEKDAY, EARNS_END_DT) , CAST(EARNS_END_DT -1 AS DATE)) AS 'Week Start' -- Adjust the "-2" to set the proper DOW
,36. - SUM(CASE WHEN P.PAYCODECATEGORYFK IN ('REG', 'ABU', 'PTO', 'LEAVE', 'HOL') THEN OTH_HRS ELSE 0 END) AS 'Unused Capacity'
,36. - SUM(CASE WHEN P.PAYCODECATEGORYFK IN ('REG', 'ABU', 'PTO', 'LEAVE', 'HOL') THEN IIF(OTH_HRS <=0, 0, OTH_HRS) ELSE 0 END) AS 'Unused Capacity'
,36. - SUM(CASE WHEN P.PAYCODECATEGORYFK IN ('REG', 'ABU', 'PTO', 'LEAVE', 'HOL') AND OTH_HRS >= 0 THEN OTH_HRS ELSE 0 END) AS 'Unused Capacity'
FROM
PAYROLL_DATA D
INNER JOIN PAYCODEMAP P ON P.PAYCODENAME = D.DESCR
WHERE EARNS_END_DT BETWEEN '8/28/2018' AND '8/26/2019'
GROUP BY
ID
,DEPTNAME
,JOBTITLE
,EARNS_END_DT
ORDER BY
EMPLOYEEID
,[Week Start]
答案 0 :(得分:0)
尝试一下
将num
与num
一起使用
void swap(ELEMENT* e1, ELEMENT* e2)
{
int tmp = e1->key;
e1->key = e2->key;
e2->key = tmp;
}
void constructMinHeap(ELEMENT arr[], int size, int num){
int left = leftNode(num);
int right = rightNode(num);
int min = num;
if (left < size && arr[left].key < arr[min].key){
min = left;
}
if (right < size && arr[right].key < arr[min].key){
min = right;
}
if(min != num)
{
swap(&arr[num], &arr[min]);
constructMinHeap(arr, size, min);
}
}
OR
这一个
在1条IIF
语句中使用CASE
SELECT ... ,36. - SUM(CASE WHEN P.PAYCODECATEGORYFK IN ('REG', 'ABU', 'PTO', 'LEAVE', 'HOL') THEN IIF(OTH_HRS<=0, 0,OTH_HRS) ELSE 0 END) AS 'Unused Capacity'
这是一个使用方法的示例,在所有情况下都没有返回负值。
确保AND
部分是正确的选择
CASE