内部联接使用逗号分隔列

时间:2014-12-18 12:04:21

标签: sql sql-server split sql-server-2012

我有一个主表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。我卡在这里。请帮帮我。

2 个答案:

答案 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它。 您可以用逗号替换正斜杠分隔符。