SQL查询以获取多行,其中多行出现一次

时间:2019-02-28 02:00:26

标签: sql sql-server tsql

我正在尝试选择所有与MerchantSequenceKey与不止一个ChainOID和ChainTypeOID为2关联的记录。

SELECT MerchantSequenceKey
FROM hpstChainList cl
JOIN hpstChains c ON cl.ChainOID = c.ChainOID
WHERE c.ChainTypeOID = 2
GROUP BY MerchantSequenceKey
HAVING COUNT(*) > 1

这将返回794条记录,但没有与每个记录相关联的ChainOID。对于我一生,我不知道如何同时返回ChainOID和MerchantSequenceKey。

我想要的样本数据如下所示:

ChainOID  MerchantSequenceKey
27528     128742
42862     128742
27528     128745
42862     128745
27528     128748
42862     128748
5488      132767
39248     132767
5522      133218
16033     133218

4 个答案:

答案 0 :(得分:2)

您要按商家对数据进行分组以计算链,但还要显示未分组的结果。我不认为您一次可以做到,所以您需要 您可以将所需的MerchantSequenceIDs列表作为子查询,然后在其外部运行基本查询,以仅使用这些商人来获取要显示的数据。

SELECT CL.ChainOID, MerchantSequenceKey
FROM hpstChainList cl
JOIN hpstChains c ON cl.ChainOID = c.ChainOID
WHERE c.ChainTypeOID = 2
   AND MerchantSequenceKey in
(
  SELECT MerchantSequenceKey
  FROM hpstChainList cl
  JOIN hpstChains c ON cl.ChainOID = c.ChainOID
  WHERE c.ChainTypeOID = 2
  GROUP BY MerchantSequenceKey
  HAVING COUNT(*) > 1
)

答案 1 :(得分:-1)

您需要在Group by中添加ChainOID

SELECT MerchantSequenceKey,c1.ChainOID
FROM hpstChainList cl
JOIN hpstChains c ON cl.ChainOID = c.ChainOID
WHERE c.ChainTypeOID = 2
GROUP BY MerchantSequenceKey,c1.ChainOID
HAVING COUNT(distinct c1.ChainOID) > 1

答案 2 :(得分:-1)

尝试使用GROUP的{​​{1}}

ChainOID

答案 3 :(得分:-1)

我认为您不需要JOIN。我只是不知道桌子上的东西是什么来的。

所以,这应该起作用:

SELECT cl.MerchantSequenceKey
FROM hpstChainList cl
GROUP BY cl.MerchantSequenceKey
HAVING COUNT(*) > 1 AND
       SUM(CASE WHEN cl.ChainTypeOID = 2 THEN 1 ELSE 0 END) > 0