如何输出表1中存储的数据,以便每个相同的帐号都具有相同的CPT组,但不匹配的数据会落到列表的底部?
我有一个表:从CPTCounts中选择*,这就是显示
格式(仅限相关字段):
account OriginalCPT Count ModifiedCPT Count
11 0 71010 1
11 71010 1 0
2 0 71010 1
2 0 71020 9
2 0 73130 1
2 0 77800 1
2 71010 1 0
2 71020 8 0
2 73130 1 0
2 73610 1 0
2 G0202 4 0
31 99010 1 0
31 0 99010 4
31 0 99700 2
我希望将结果分组如下......并显示如下或类似内容。
Account OriginalCPT Count ModifiedCPT Count
11 71010 1 71010 1
2 71010 1 71010 1
2 71020 8 0
2 73130 1 0
2 73610 1 0
2 G0202 4 0
31 99010 1 99010 4
31 0 99700 2
我有一个包含上述值的表格;
从#CPTCounts
中选择*我正在寻找的分组是Original = Modified CPT,有时候我不会在一侧或另一侧有值,但大多数时候我会有一个匹配。我想将所有不匹配的内容放在帐户的底部。
有什么建议吗?
我正在考虑创建第二个表并将两个表与帐户连接但是如何返回每个值?
选择cpt1.account,cpt1.originalCPT,cpt1.count,cpt2.modifiedcpt,cpt2.count
来自#cptcounts cpt1
在cpt1.accont = cpt2.account
但我遇到了解决方案的问题。
答案 0 :(得分:0)
我不确定我是否有一个确切的解决方案,但至少可能需要一些思考。您需要“原始”或“已修改”列的这一事实让我觉得您需要一个完整的外连接而不是左连接。您没有提到您正在使用的数据库。例如,在MySql中,可以通过左连接和右连接的并集来模拟完整连接,如下所示:
select cpt1.account, cpt1.originalCPT, cpt1.countO, cpt2.modifiedcpt, cpt2.countM
from CPTCounts cpt1
left outer join CPTCounts cpt2
on cpt1.account = cpt2.account
and cpt1.originalCPT=cpt2.modifiedCPT
where cpt1.account is not null
and (cpt1.originalCPT is not null or cpt2.modifiedCPT is not null)
union
select cpt1.account, cpt1.originalCPT, cpt1.countO, cpt2.modifiedcpt, cpt2.countM
from CPTCounts cpt1
right outer join CPTCounts cpt2
on cpt1.account = cpt2.account
and cpt1.originalCPT=cpt2.modifiedCPT
where cpt2.account is not null
and (cpt1.originalCPT is not null or cpt2.modifiedCPT is not null)
order by originalCPT, modifiedCPT, account
排序将不匹配的行带到顶部,但这似乎比使匹配工作的问题要小。
(您的输出数据有点令人困惑,因为例如,CPT 71020同时出现在原始列和修改列中,但您没有将其显示为结果集中匹配的列之一。我在假设这是因为它只是一个例子...但如果我错了,那么我错过了你的一些意图。)
你可以在这个SQL Fiddle中玩。