2012-03-13 2 views
3

CPT 청구 코드가 청구 대상인지 확인하기 위해 쿼리에서 정기적으로 사용해야하는 테스트가 있습니다. SQL 쿼리에서 테스트는 다음과 같습니다.SQL Server 쿼리에서 자주 사용되는 복잡한 테스트를 기능으로 바꾸기

where (pvp.code between '99201' and '99215' 
    or pvp.code between '99221' and '99239') 

더한계가 더 많습니다.

이 기능을 기능에 연결하여 기능을 만들려고했지만 "잘못된 구문"오류가 발생했습니다. 실제로 큰 놀라움은 아닙니다.

CREATE FUNCTION IsEncounter 
(
    @code varchar(20) 
) 
RETURNS bit 
AS 
BEGIN 
    DECLARE @Result bit; 

    SELECT @Result = @code between '99201' and '99215' 
      or @code between '99221' and '99239'; 

    -- Return the result of the function 
    RETURN @Result; 

END 

은 내가

if (@code >= '99201' and @code <= '99215') 
     or (@code >= '99221' and @code <= '99239') 
    select @Result = 1 
else 
    select @Result = 0; 

같은 것을 할 수 있다고 생각하지만 나는이 작업을 수행하는 가장 깨끗한 방법을 알고 싶습니다. 감사.

+0

나는 s의 테이블을 창조 할 것을 건의합니다 tart & end ranges를 사용하면 테이블에서 count()를 간단히 선택할 수 있습니다. COUNT()는 0 또는 1 만 반환해야합니다. BIT로 쉽게 캐스팅해야합니다. ? – HeavenCore

+0

흥미로운 생각이지만, 곧 코드에 그대로 두어 코드가 무엇인지 알아 내기 위해 여러 곳을 볼 필요가 없습니다. – SarekOfVulcan

+0

도움 주셔서 감사합니다. SELECT 문을 쓸 수는 있지만 DDL을 자세히 살펴보면 문제가 생깁니다. :-) – SarekOfVulcan

답변

4

뭔가 작동합니다 : 다음을 시도

CREATE FUNCTION IsEncounter 
(
    @code varchar(20) 
) 
RETURNS bit 
AS 
BEGIN 
    DECLARE @Result bit 

    SET @Result = CASE WHEN (@code between '99201' and '99215') or (@code between '99221' and '99239') THEN 1 ELSE 0 END 

    RETURN @Result 
END 
3

나는 당신이 거의 당신의 UDF에 있다고 생각합니다. 나는 약간의 구문 문제 만 있다고 생각한다. 그런 다음 절은 단순히 것 WHERE

CREATE FUNCTION IsEncounter 
(
    @code varchar(20) 
) 
RETURNS bit 
AS 
BEGIN 
    DECLARE @Result bit = 0 

    IF @code between '99201' and '99215' or @code between '99221' and '99239' 
    BEGIN 
     SET @Result = 1 
    END 

    RETURN @Result 

END 

:이 같은

where dbo.IsEncounter(p.Code)=1 
+0

감사! 아래에 제안 된 CASE 구문을 사용하여 갔지만 이것은 잘 작동했을 것입니다. – SarekOfVulcan

1

나는 테이블에 내 범위를 이동시킨 후 것 이것을하십시오 :

CREATE FUNCTION IsEncounter (@code VARCHAR(20)) 
RETURNS BIT 
AS 
    BEGIN 
     DECLARE @MatchedRanges SMALLINT ; 
     DECLARE @Result BIT ; 

     SELECT @MatchedRanges = COUNT(*) 
     FROM tblRangeWhiteList 
     WHERE @code BETWEEN RangeStart AND RangeEnd 

     IF @MatchedRanges > 0 
      SET @Result = 1 
     ELSE 
      SET @Result = 0 

     RETURN @Result 

    END 
+1

OP와 같이 건강 관리 분야에서 일하는 사람으로서 이것은 CPT 코드가 관리되는 방식으로 유지 보수의 악몽이 될 수 있습니다. –

+0

실제로 테이블의 범위를 사용하면 항상 수정 된 범위를 포함하도록 SQL 코드를 편집하는 것보다 바람직합니다. – HeavenCore

+0

CPT 코드는 자주 변경되지 않습니다. 하지만 일반적으로 일치하지 않습니다. 100 - 200에서 151을 건너 뜁니다. 따라서이 시점에서 테이블과 로직을 복잡하게 만들어 더 단순하다고 생각하는 것을 달성해야합니다. 이 경우, "청구 할 수있는 모든 CPT를 내게주세요"라는 함수를 만들면 모든 논리를 채우면 거의 그 논리를 변경할 수 없습니다. 건강 관리 청구는 HCPCS와 더욱 복잡해집니다. 따라서이 경우 "이 절차를 청구 할 수 있습니까?"라는 기능을 사용할 수 있습니다. 나는 그것이 예쁘지 않다는 것을 압니다. 그러나 그것이 때때로 작동하는 방식입니다. –

관련 문제