Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在现有sql查询中使用位运算符?_Sql_Sql Server - Fatal编程技术网

如何在现有sql查询中使用位运算符?

如何在现有sql查询中使用位运算符?,sql,sql-server,Sql,Sql Server,这是我的sql查询。我在索赔表中有一个列名“ExpenseBucketCoverage”,我在其中存储位运算符,并在一个列中存储多个值,如下所示 MED_COPAY = 1, MED_DED= 10, MED_COINS = 100, RX_COPAY = 1, RX_DED= 10, RX_COINS = 100 我想通过使用ExpenseBucketCoverage列值来替换查询中的硬编码值,如MED\u COPAY,MED\u DED,RX\u Coverage,RX\u COPAY。谁

这是我的sql查询。我在索赔表中有一个列名“ExpenseBucketCoverage”,我在其中存储位运算符,并在一个列中存储多个值,如下所示

MED_COPAY = 1, MED_DED= 10, MED_COINS = 100, RX_COPAY = 1, RX_DED= 10, RX_COINS = 100
我想通过使用
ExpenseBucketCoverage
列值来替换查询中的硬编码值,如
MED\u COPAY
MED\u DED
RX\u Coverage
RX\u COPAY
。谁能告诉我怎么做

有人向我推荐了下面的解决方案

从索赔中检索数据,并将其保留在资格中的第一个匹配记录中。然后添加自定义代码以循环遍历datarows,按covered expense bucket分割行,并根据索赔的ExpenseBucketCoverage值在内存列中设置服务类别代码

选择
e、 类别,
c、 服务类型,
“II”作为RepordType,
e、 TPAId作为Tpau Id,
e、 员工代码,
e、 订阅人,
e、 MemberID,
c、 服务来源:,
c、 服务对象,
案例
当e.categoryid出现在(‘MED’、‘RX’)中时
可扣除的
当e.categoryid出现在('MED_COINS','RX_COINS')中时
isnull(硬币,0)
当e.categoryid出现在('MED_COPAY','RX_COPAY')中时
科帕伊
其他0
随着时间的推移,
“”作为AccountTypeCode,
“1”索赔平均工资,
e、 类别,
案例c.服务类型
什么时候“H”呢
案例e.付款人指示人
当“N”时,则为“0”
当“Y”然后是“1”
结束
当“P”然后是“0”
以付费提供商的身份结束,
案例c.服务类型
什么时候“H”呢
案件支付指示人
当“N”时,则为“0”
当“Y”然后是“1”
结束
当“P”然后是“0”
以报销方式结束,
案例c.服务类型
当“H”之后是c.提供者
当“P”时,那么“
以ProviderId结尾,
“1”强制执行AccountEffectiveDates,
c、 身份证,
c、 ClaimNumber+e.CategoryId为“外部ClaimNumber”,
c、 提供者名称,
c、 CarrierId+';'+c、 SourceClaimNumber作为注释
从索赔c
e.TPAId=c.TPAId和e.EIN=c.EIN和
c、 已处理='Y'和e.FilterType='资格'
和c.TPAId='PrimePay'
和(c.ServiceFrom>=e.BenefitEffectiveDate

和c.ServiceFrom您能添加示例数据和预期输出吗?为什么要在一列中存储多个值?您知道这违反了吗?@MarkBannister谢谢您的评论,请参阅此示例以在一列中选择多个值。@M005:在所引用的示例中,作者没有解释为什么有必要y将多个不同的值组合到一个字段中。@MarkBannister我这样做的原因是因为我不想在现有数据库中添加新列,将来可能会有更多类似的字段,因此避免每次为特定组添加列可能不是个好主意。但您是对的,这违反了规范化离子规则。
SELECT 
e.categoryid,
c.servicetype,
'II' AS RepordType, 
e.TPAId AS TPA_Id,
e.EmployerCode,
e.SubscriberId,
e.MemberID,
c.ServiceFrom,
c.ServiceTo,  
CASE 
    WHEN e.categoryid IN( 'MED_DED', 'RX_DED' ) THEN 
        deductible 
    WHEN e.categoryid IN( 'MED_COINS', 'RX_COINS' ) THEN 
        isnull(coins,0) 
    WHEN e.categoryid IN( 'MED_COPAY', 'RX_COPAY' ) THEN 
        copay 
        ELSE 0
        END AS ClaimAmount,  
'' AS AccountTypeCode, 
'1' ClaimsCrossoverAutoPay, 
e.CategoryId,   
    CASE c.ServiceType 
        WHEN 'H' THEN 
            CASE e.PayeeIndicator 
                WHEN 'N' THEN '0' 
                WHEN 'Y' THEN '1' 
        END 
        WHEN 'P' THEN '0' 
        END AS PayProvider,  
    CASE c.ServiceType 
        WHEN 'H' THEN 
        CASE PayeeIndicator 
            WHEN 'N' THEN '0' 
            WHEN 'Y' THEN '1' 
            END 

        WHEN 'P' THEN '0' 
            END AS ReimbursementMethod,  

    CASE c.ServiceType 
        WHEN 'H' THEN c.Provider 
        WHEN 'P' THEN '' 
        END AS ProviderId,  
'1' EnforceAccountEffectiveDates, 
c.Id, 
c.ClaimNumber + e.CategoryId as 'ExternalClaimNumber', 
c.ProviderName, 
c.CarrierId + ';' + c.SourceClaimNumber AS Notes  
FROM Claim c   
INNER JOIN Eligibility e   ON e.TPAId = c.TPAId AND e.EIN = c.EIN AND  
 c.Processed = 'Y' AND e.FilterType = 'Eligibility'  
 AND c.TPAId='PrimePay'  
 AND (c.ServiceFrom   >= e.BenefitEffectiveDate 
 AND c.ServiceFrom           <=e.BenefitTermDate)   
 AND (  (  c.PayorID = c.PatientSSN
 AND e.SubscriberSSN = c.PatientSSN   
 AND (c.EmployeeFirstName = c.PatientFirstName 
 AND c.EmployeeLastName = c.PatientLastName)  
 AND(e.MemberSSN = '' OR e.MemberSSN = NULL)  
 AND(e.MemberFirstName = '' OR e.MemberFirstName = NULL)
 AND(e.MemberLastName = '' OR e.MemberLastName = NULL))
 OR((c.PayorID !=  c.PatientSSN AND e.MemberSSN = c.PatientSSN 
 AND  e.MemberFirstName = c.PatientFirstName 
 AND e.MemberLastName = c.PatientLastName)  
 OR(c.PayorID != c.PatientSSN AND e.MemberFirstName = c.PatientFirstName 
 AND e.MemberLastName= c.PatientLastName)))
 AND (( c.Servicetype ='P' 
 AND e.CategoryID IN('RX_COINS','RX_COPAY', 'RX_DED' )) 
 OR ( c.Servicetype = 'H' 
 AND e.CategoryID IN( 'MED_COINS','MED_COPAY', 'MED_DED' )))