1

各顧客に割り当てられたすべての顧客プロンプトの連結リストを返そうとしていますが、顧客キー (CUS_PK) ごとに 1 つの行のみが返されます。次のクエリでは、探している情報が得られますが、複数のプロンプトが 1 人の顧客に割り当てられている場合、重複する行が取得されます。プロンプト キーがすべての可能な組み合わせで返されることを除いて、各行は同一です。組み合わせごとに 1 行。これは結合を使用しているためであることはわかっていますが、これを行う別の方法を思いつくほど 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 に答える