我正在尝试返回分配给每个客户的所有客户提示的连锁列表,每个客户密钥(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
另外,我如何指定提示的返回顺序?
谢谢!
答案 0 :(得分:0)
尝试按特定顺序加入它们(例如,使用'&lt; ='而不是'&lt;&gt;'):
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)