我在查询工作方面遇到了问题,就像我需要它一样。我需要为邮件制作一张标签,并且只想选择没有电子邮件地址的人。此外,我只想向每个地址/家庭发送1封邮件。以下select语句返回我需要的所有字段。
SELECT [Family Members].[Family ID]
,[Family Members].[First Name]
,[Family Members].[Last Name]
,[Family Members].Email
,[Master Record].[Address 1]
,[Master Record].[Address 2]
,[Master Record].City
,[Master Record].STATE
,[Master Record].Zipcode
FROM [Master Record]
LEFT JOIN [Family Members]
ON [Master Record].[Family ID] = [Family Members].[Family ID];
现在有点关于我的桌子。 "家庭ID"是一个密钥,每个唯一的家庭ID都有一个唯一的地址。但是,每个家庭都有多个成员包含在[家庭成员]表中,每个家庭成员可能/可能没有电子邮件地址。如果一个家庭的任何成员列出了电子邮件地址,我不想发送纸质邮件,我希望将它们从表格中删除。我也不想根据"家庭ID"
在查询中看到多个结果所以要清楚这个查询的结果应该是唯一的"家庭ID"值,并且没有包含电子邮件地址的家庭成员。
我希望这是可能的。感谢。
答案 0 :(得分:0)
您可以添加
GROUP BY [Family Members].[Family ID]
HAVING COUNT([Family Members].Email) = 0
请记住,如果家庭中有多个成员没有电子邮件成员,这将返回未确定的家庭成员的详细信息。
此外,您可能希望使用JOIN
而不是LEFT JOIN
来排除没有家庭成员的主记录。
答案 1 :(得分:0)
以下似乎对我有用。虽然我对使用所有Max()函数有点不安。我将继续发布此处,看看是否有人有更优雅的解决方案。
SELECT [Master Record].[Family ID], Max([Master Record].[Last Name]) AS [MaxOfLast Name],
Max([Master Record].[Address 1]) AS [MaxOfAddress 1], Max([Master Record].[Address 2]) AS
[MaxOfAddress 2], Max([Master Record].City) AS MaxOfCity, Max([Master Record].State) AS
MaxOfState, Max([Master Record].Zipcode) AS MaxOfZipcode, Max([Family Members].Email) AS
MaxOfEmail
FROM [Master Record] LEFT JOIN [Family Members] ON [Master Record].[Family ID] = [Family
Members].[Family ID]
GROUP BY [Master Record].[Family ID]
HAVING (((Count([Family Members].Email))=0));