SQL Server 2012를 사용하고 있습니다. WHERE 절을 특정 조건으로 설정하려고합니다. PAE.CaseStatusId는 1, 2, 4, 8, 16 값을 포함합니다. Bitwise &을 사용하여 WHERE 조건을 선택합니다. 예를 들어 @CaseStatusSum = 3 인 경우 CaseStatusId IN (1, 2)을 선택하십시오. @CaseStatusSum = 4이면 CaseStatusId = 4 등을 선택하십시오. IFF 또는 CASE로 조건을 설정하는 데 문제가 있습니다. 어쨌든이 문제를 해결할 수 있을지 궁금합니다. 모든 입력을 부탁드립니다. 고맙습니다. 3 개 CaseStatusId 시나리오의 최대 주어진 시간에 있기 때문에SQL Server 2012 IF IF Case ... WHEN
CREATE PROCEDURE [dbo].[getPagingPatientLiteByNameTest]
(
@CaseStatusSum INT,
@FilterCriteria NVARCHAR(50),
@PageNo INT = 1,
@PageSize INT = 10,
@SortColumn NVARCHAR(40) = 'OperationDate',
@SortOrder NVARCHAR(4) = 'DESC'
)
AS
BEGIN
DECLARE
@lFilter NVARCHAR(50),
@lSortCol NVARCHAR(40),
@lFirstRec INT,
@lLastRec INT,
@lTotalRows INT,
SET NOCOUNT OFF
/* Setting local variable */
SET @lFilter = LTRIM(RTRIM(@FilterCriteria))
SET @lSortCol = LTRIM(RTRIM(@SortColumn))
SET @lFirstRec = (@PageNo - 1) * @PageSize + 1
SET @lLastRec = @PageNo * @PageSize
SET @lTotalRows = @lLastRec - @lFirstRec + 1
; WITH CTE_Results
AS (
SELECT ROW_NUMBER() OVER (ORDER BY
CASE WHEN (@SortColumn = 'OperationDate' AND @lSortCol = 'ASC')
THEN OpDate
END ASC,
CASE WHEN (@SortColumn = 'OperationDate' AND @lSortCol = 'DESC')
THEN OpDate
END DESC,
CASE WHEN (@SortColumn = 'HN' AND @lSortCol = 'ASC')
THEN HN
END ASC,
CASE WHEN (@SortColumn = 'HN' AND @lSortCol = 'DESC')
THEN HN
END DESC,
CASE WHEN (@SortColumn = '')
THEN OpDate
END DESC
) AS ROWNUM,
Count(*) over() AS TotalCount,
Id,
RecOut,
CaseStatusId,
LastName,
OpDate
FROM PAE
WHERE
(CaseStatusId = (
CASE @CaseStatusSum
WHEN 1 THEN 1
WHEN 2 THEN 2
WHEN 4 THEN 4
WHEN 8 THEN 8
WHEN 16 THEN 16
END)
/* MS SQL Server 2012
In the following commented section, neither IIF nor IF..ELSE work.
My goal is IF @CaseStatusSum = 3 THEN select CaseStatusSum IN (1, 2) and
IF @CaseStatusSum = 8 THEN select CaseStatusSum IN (8)/CaseStatusSum = 8
-- here is the problem, I am unable to get 1, 2 out of IIF to the IN condition
OR CaseStatusId IN (IIF(@CaseStatusSum = 3, (1 2), 0))
-- here is the problem: IF is not allow in this structure
OR IF (@CaseStatusSum = 3)
BEGIN
CaseStatusId IN (1, 2)
END
ELSE
BEGIN
CaseStatusId = 4
END
END IF
*/
OR CaseStatusId = (
CASE @CaseStatusSum
WHEN 1 THEN 4
WHEN 2 THEN 2
WHEN 4 THEN 4
WHEN 8 THEN 8
WHEN 16 THEN 16
END)
)
AND RecOut > getDate()
AND (@lFilter IS NULL OR (LastName LIKE @lFilter))
)
SELECT
TotalCount,
Id,
RecOut,
CaseStatusId,
LastName,
OpDate
FROM CTE_Results
WHERE
ROWNUM BETWEEN @lFirstRec AND @lLastRec
ORDER BY ROWNUM ASC
END