Sql 带逗号分隔列的内部联接

Sql 带逗号分隔列的内部联接,sql,sql-server,split,sql-server-2012,Sql,Sql Server,Split,Sql Server 2012,我有一个主表RejectionList和一个事务表,其中拒绝原因是多个 假设MSTR_Rejection是主表名和RejectionID,RejectionReason是两个字段 RejectionID RejectionReason 1 Invalid Mobile 2 Invalid Email 3 Invalid Pincode 现在我有了一个Trasaction表,其中rejecti

我有一个主表RejectionList和一个事务表,其中拒绝原因是多个

假设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

现在,我想根据事务表中的RejectionReason创建一个拒绝报告组。我被困在这里。请帮帮我。

您的数据库设计非常糟糕。您应该使用连接表,而不是逗号分隔的列表

这就是说,你可以用
做你想做的事,比如
。以下是一个例子:

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;

上述方法并不是特别有效。如果想要提高性能,需要修复数据库结构以使用连接表。

您的数据库设计非常糟糕。您应该使用连接表,而不是逗号分隔的列表

这就是说,你可以用
做你想做的事,比如
。以下是一个例子:

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;

上述方法并不是特别有效。如果要提高性能,需要修复数据库结构以使用连接表。

您好,您可能需要尝试ListAg,而对于oracle,对于sql server,如果他们有等效的连接表,则没有使用:

LISTAGG: 挑选 索赔编号:, 总(金额)支付金额, 组内的列表标记(收款人“/”)(按收款人描述排序)payname 从…起 SCHEMA.TABLENAME 分组索赔编号

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
我之前说的那个群组,实际上没有用,我只是用谷歌搜索一下。
您可以用逗号替换正斜杠分隔符。

您好,您可能想尝试使用Listag来代替oracle,sql server,如果他们有一个与之等效的名称,则没有在上使用:

LISTAGG: 挑选 索赔编号:, 总(金额)支付金额, 组内的列表标记(收款人“/”)(按收款人描述排序)payname 从…起 SCHEMA.TABLENAME 分组索赔编号

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
我之前说的那个群组,实际上没有用,我只是用谷歌搜索一下。
您可以用逗号替换正斜杠分隔符。

逗号分隔的列始终表示数据库设计已损坏…如果您展示您迄今为止的尝试,这将是一件好事。您使用的是什么数据库?我使用的是MS Sqlserver2012@piet.t“永远”是一个极端的词。逗号分隔的列总是表示数据库设计已损坏…如果您展示您迄今为止所尝试的内容,这将是一件好事。您使用的是什么数据库?我使用的是MS Sqlserver2012@piet.t“总是”是一个极端的词,请告诉我怎么用。我需要那个东西,请告诉我怎么做。我需要那个东西。亲爱的戈登·林诺夫,什么是m.RejectionID亲爱的戈登·林诺夫,我修好了isseu,它成功了。非常感谢。亲爱的Gordon Linoff,什么是m.RejectionID亲爱的Gordon Linoff,我修好了isseu,它成功了。非常感谢你。