无法执行基于JOINS的联接两个表

时间:2019-10-17 12:30:24

标签: sql sql-server

请参阅https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=15bd35473ac0c18b2b3a21f3decd1a77

在这里您将找到两个表格-保证金和BSC(计费服务类别)。他们有共同的列,即BillNo。使用我的CTE查询,我得到了URL中提到的结果(上面)

我需要的输出查询应仅过滤 ServiceCategory_Name 为“ IP软件包”的记录

如果是IP软件包,则需要参考列- ServiceName 。因此,在示例中,我关注第4行,即服务名称为“ GIPSA腹股沟疝修补术-单侧(DELUXE)”

不需要所有行。

如果servicecategoryName不是IP软件包,则ServiceName应该显示为NULL。

理想地。应该有2行(每个帐单号)应显示类似

的输出

enter image description here

我已经编写了CTE查询(请参阅dbfiddle URL)。在这里,我尝试将“具有子句”(请参阅​​here)放在“分组依据”中,以过滤IPPackage,但这样做会删除第二行。

建议和帮助表示赞赏!

2 个答案:

答案 0 :(得分:2)

根据上面的简介(如果您输入的话)

where ServiceCategory_Name  = 'IP PACKAGE'

之后
from cte

这将仅过滤软件包。 你数然后UNION添加没有值的行

where ServiceCategory_Name  = 'IP PACKAGE'
group by MonthName, BillNo, BSCBillNo, Service_Name, ServiceCategory_Name
UNION
select top 1 MonthName,
0 as amt,
0 as [Internal Dr Visit Charges]
,0 as [External Dr Visit Charges],
cte.BillNo,
cte.BSCBillNo,
'' AS Service_Name,
'' AS ServiceCategory_Name
from cte
order by amt desc

答案 1 :(得分:1)

尝试一下,它将解决您的问题。

if()

您需要添加一个条件,即b left join BSCTemp bsc on mat.BillNo = bsc.Billno and bsc.ServiceCategory_Name='IP Package' 。它给出正确的输出。

请参考此链接https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=f2c6ea9939dc2d71565b3c491daa304a

相关问题