2

在 MS Access 中,我使用 SQL 将两个查询与内部联接组合在一起,这两个查询都要求用户输入开始日期和结束日期范围。第一个查询(查询 1)列出了离开程序的人数、离开的情况、离开的月份和年份。它是将 Count 函数首先按年份分组,然后按月份分组,然后是离开情况(可以是 5 个选项中的任何一个),这意味着每个月有多个记录(但每个月的记录数不一定相同) )。

第二个查询(查询 2)计算我们已录取的人数、月份和年份。它首先按年分组,然后按月分组。因此,使用此查询,每月只有一条记录。

我的内部联接正确地组合了查询,除了它多次重复查询 2 的值,具体取决于查询 1 的每个月有多少记录。有没有办法让查询 2 的值每月只列出一次,从而使该月的其余记录为空?

这是查询1:

SELECT Count(clients.ssn) AS CountOfDepartures, clients.[leaving situation], a.monthname, a.year1, a.month1
FROM clients INNER JOIN (SELECT month(clients.[departure date]) AS Month1, year(clients.[departure date]) AS Year1, months.monthname, clients.ssn FROM clients 
INNER JOIN months ON month(clients.[departure date])=months.monthnumber WHERE clients.[departure date] BETWEEN [Enter Start Date] AND [Enter End Date])  AS A 
ON clients.ssn=a.ssn
GROUP BY a.year1, a.monthname, clients.[leaving situation], a.month1
ORDER BY a.year1 DESC , a.month1 DESC;

这是查询2

SELECT Count(clients.ssn) AS CountofIntakes, b.monthname, b.year2, b.month2
FROM clients 
INNER JOIN (SELECT month(clients.prog_start) AS Month2, year(clients.prog_start) AS Year2, months.monthname, clients.ssn 
FROM clients INNER JOIN months ON month(clients.prog_start)=months.monthnumber WHERE clients.prog_start BETWEEN [Enter Start Date] AND [Enter End Date])  AS B 
ON clients.ssn=b.ssn
GROUP BY b.monthname, b.year2, b.month2
ORDER BY b.year2 DESC , b.month2 DESC;

这是我组合它们的方式,但它给了我重复的值:

SELECT countofdeparturesbyleavingsituationmonth.countofdepartures, countofdeparturesbyleavingsituationmonth.[leaving situation], countofdeparturesbyleavingsituationmonth.monthname, countofdeparturesbyleavingsituationmonth.year1, countofdeparturesbyleavingsituationmonth.month1, countofintakesbymonth.countofintakes
FROM countofdeparturesbyleavingsituationmonth 
INNER JOIN countofintakesbymonth ON (countofdeparturesbyleavingsituationmonth.monthname=countofintakesbymonth.monthname) AND (countofdeparturesbyleavingsituationmonth.year1=countofintakesbymonth.year2) AND (countofdeparturesbyleavingsituationmonth.monthname=countofintakesbymonth.monthname)
ORDER BY year1 DESC , month1 DESC;

CLIENTS 表为每个客户记录了一组不同临床数据的列(我在一家非营利性药物/酒精康复中心工作)。MONTHS 表只是将十二个月写在一列中,第二列中有相应的数字。我使用 MONTHS 表的内部连接来列出月份名称而不是数字(尽管我刚刚意识到我可能只是在我的报告中使用 MonthName 函数来执行此操作......)。任何建议都非常感谢!另外,我问这个问题是因为当我对此查询进行报告时,摄入量的总报告(和每个日历年)的 SUM 值不正确,因为在查询中,每个月都有多个摄入量值。所以 SUM 比它应该的要大得多。除了该问题之外,此查询还会生成正确的报告。

4

1 回答 1

1

您可以使用 DISTINCT 子句:

SELECT DISTINCT
  queryA.people,
  Null as situation,
  queryA.[month],
  queryA.[year]
FROM
  queryA INNER JOIN queryB
  ON (queryA.people=queryB.people)
     AND (queryA.[month]=queryB.[month])
     AND (queryA.[year]=queryB.[year])
于 2013-02-11T22:19:06.447 回答