1

我正在尝试返回分配给每个客户的所有客户提示的串联列表,每个客户键 (CUS_PK) 只返回一行。以下查询为我提供了我正在寻找的信息,但是当多个提示分配给一个客户时,我得到重复的行,每一行都是相同的,除了提示键以所有可能的组合返回,每个组合一行。我知道这是因为我正在使用连接,但我对 SQL 的了解还不够,无法想出另一种方法来做到这一点。

这是我正在使用的查询:

select CUS1.CUS_PK,
CLP1.CLP_PRM_FK || CASE WHEN CLP2.CLP_PRM_FK <> '' THEN ', ' ELSE '' END ||
CLP2.CLP_PRM_FK || CASE WHEN CLP3.CLP_PRM_FK <> '' THEN ', ' ELSE '' END ||
CLP3.CLP_PRM_FK || CASE WHEN CLP4.CLP_PRM_FK <> '' THEN ', ' ELSE '' END ||
CLP4.CLP_PRM_FK AS 'AP'

FROM ecrs.Customers CUS1

LEFT OUTER JOIN ecrs.CustomerLinkPOSPrompts CLP1 ON (CLP1.CLP_CUS_FK = CUS1.CUS_PK)
LEFT OUTER JOIN ecrs.CustomerLinkPOSPrompts CLP2 ON (CLP2.CLP_CUS_FK = CUS1.CUS_PK AND CLP2.CLP_PRM_FK<>CLP1.CLP_PRM_FK)
LEFT OUTER JOIN ecrs.CustomerLinkPOSPrompts CLP3 ON (CLP3.CLP_CUS_FK = CUS1.CUS_PK AND CLP3.CLP_PRM_FK<>CLP2.CLP_PRM_FK AND CLP3.CLP_PRM_FK<>CLP1.CLP_PRM_FK)
LEFT OUTER JOIN ecrs.CustomerLinkPOSPrompts CLP4 ON (CLP4.CLP_CUS_FK = CUS1.CUS_PK AND CLP4.CLP_PRM_FK<>CLP3.CLP_PRM_FK AND CLP4.CLP_PRM_FK<>CLP2.CLP_PRM_FK AND CLP4.CLP_PRM_FK<>CLP1.CLP_PRM_FK)

ORDER BY CUS1.CUS_PK

GROUP BY 似乎没有任何效果。

重复的行看起来像这样,从 0-3 提示结果:

CUS_PK  AP
-----   -----
35331   
35274   40
35342   37, 65
35342   65, 37  
35344   37, 53, 65
35344   53, 65, 37
35344   37, 65, 53
35344   53, 37, 65
35344   65, 53, 37
35344   65, 37, 53

另外,我如何指定返回提示的顺序?

谢谢!

4

1 回答 1

0

尝试以特定顺序加入它们(例如使用 '<=' 而不是 '<>'):

LEFT OUTER JOIN ecrs.CustomerLinkPOSPrompts CLP1 ON (CLP1.CLP_CUS_FK = CUS1.CUS_PK)
LEFT OUTER JOIN ecrs.CustomerLinkPOSPrompts CLP2 ON (CLP2.CLP_CUS_FK = CUS1.CUS_PK AND CLP2.CLP_PRM_FK <= CLP1.CLP_PRM_FK)
LEFT OUTER JOIN ecrs.CustomerLinkPOSPrompts CLP3 ON (CLP3.CLP_CUS_FK = CUS1.CUS_PK AND CLP3.CLP_PRM_FK <= CLP2.CLP_PRM_FK AND CLP3.CLP_PRM_FK <= CLP1.CLP_PRM_FK)
LEFT OUTER JOIN ecrs.CustomerLinkPOSPrompts CLP4 ON (CLP4.CLP_CUS_FK = CUS1.CUS_PK AND CLP4.CLP_PRM_FK <= CLP3.CLP_PRM_FK AND CLP4.CLP_PRM_FK <= CLP2.CLP_PRM_FK AND CLP4.CLP_PRM_FK <= CLP1.CLP_PRM_FK)
于 2013-11-06T16:30:55.487 回答