我知道这一定是在 SQL 101 中,但我需要返回其中列同时包含 X 和 Y 且 ID 重复的行。
示例表。
ACCOUNT | Activity
-------------------------
1 | Email
1 | Appointment
2 | Email
2 | Email
3 | Email
3 | Appointment
我需要只返回账户 1 和 3 的 SQL,如下所示:
ACCOUNT | Activity
-------------------------
1 | Email
1 | Appointment
3 | Email
3 | Appointment
在伪代码中,它是(其中 ID 与“约会”和“电子邮件”一起出现)
不应返回帐户 2,因为表中没有 WHERE Account = 2 AND Activity = 'Appointment' 的行。
我希望这是有道理的,并且非常感谢您的意见。
提前致谢。
行下编辑
<小时/>感谢大家的建议,我非常喜欢 @rafa 使用 count unique 的建议,但是当然查询比第一次建议的更复杂。第一个表实际上是另一个查询的结果集,下面的查询包括@rafa建议,但查询不起作用,我知道我需要调用子查询,但不确定在哪里或如何调用,再次感谢:
SELECT T.ACCOUNT, T.COMPANY, H.RESPONSE, H.DAT_ AS Resp_Date, H.USERNAME, (date_format(P.ENDDATE,'%M')) AS Renewal, T.OWNER, COUNT(DISTINCT(H.ACTIVITY)) AS Dis_Act, H.CustomerStatus, H.Contact, A.ANAL14 AS APPDATE
FROM TELRCMxxx T LEFT JOIN TELCOMxxx H ON T.ACCOUNT = H.ACCOUNT LEFT JOIN ACCSTOxxx P ON T.ACCOUNT = P.ACCOUNT LEFT JOIN RCMANLxxx A ON T.ACCOUNT = A.ACCOUNT
WHERE (H.ACTIVITY in ('Appointment', 'email'))
Group by Account
having Dis_Act > 1
J.
<小时/>谢谢大家。
最佳答案
一个非常幼稚的方法是:
SELECT
*
FROM MyTable t1
WHERE EXISTS
(
SELECT 1 FROM MyTable WHERE ACCOUNT = t1.ACCOUNT AND Activity = 'Email'
)
AND EXISTS
(
SELECT 1 FROM MyTable WHERE ACCOUNT = t1.ACCOUNT AND Activity = 'Appointment'
)
关于mysql - SQL 返回第 1 列包含 X 和 Y 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22517169/