我有一个主表RejectionList和一个Transaction表,其中拒绝原因是多个。
假设MSTR_Rejection是主表名,而RejectionID,RejectionReason是两个字段。
RejectionID RejectionReason
1 Invalid Mobile
2 Invalid Email
3 Invalid Pincode
现在我有一个Trasaction表,其中rejectionID是多次
TrasactionID RejectionReason
1 1
2 2,3
3 1,2,3
现在我想从Transaction表中制作拒绝报告组RejectionReason。我卡在这里。请帮帮我。
答案 0 :(得分:3)
您的数据库设计非常糟糕。您应该使用联结表来代替以逗号分隔的列表。
那就是说,你可以用like
做你想做的事。这是一个例子:
select r.rejectionreason, count(*)
from MSTR_Rejection r join
Transaction t
on ',' + t.rejectionreason + ',' like '%,' + cast(m.RejectionId as varchar(255)) + ',%'
group by r.rejectionreason;
以上不是特别有效。如果需要性能,则需要修复数据库结构以使用联结表。
答案 1 :(得分:1)
嗨,你可能想尝试LISTAGG代替oracle,对于sql server,如果他们有相同的东西就不要使用它:
LISTAGG: 选择 claim_no, sum(amt)pay_amt, 组内的listagg(收款人,'/')(按收款人desc排序)payname 从 SCHEMA.TABLENAME group by claim_no
Here's my table
CLAIM_NO PAYEE AMT
2014-1-10-1315 H-088 john 100
2014-1-10-1315 H-091 john 100
2014-1-10-1315 H-087 john 1000
2014-1-10-1315 H-113 op personnel 1150
2014-1-10-1315 H-087 tim 575.25
here's the result:
CLAIM_NO PAY_AMT PAYNAME
2014-1-10-1315 H-087 1575.25 tim/ john
2014-1-10-1315 H-088 100 john
2014-1-10-1315 H-091 100 john
2014-1-10-1315 H-113 1150 op personnel
我之前说过的group_concat和其他东西,实际上没有使用它,我只是google它。 您可以用逗号替换正斜杠分隔符。