需要访问数据库的SQL查询

时间:2010-06-03 17:47:24

标签: ms-access

嘿伙计们,首先抱歉,我无法使用我的雅虎提供商登录。 反正我有这个问题。让我向你解释一下,然后我会告诉你一张照片。

我有一个访问数据库表。它有“报告ID”,“recpient id”,“收件人姓名”和“报告请求”。表“含义”的含义是使用该报告的用户仍然需要它,或者我们可以解除它。

以下是数据的外观(阻止公司用户ID和用户名): *检查下面的链接,我无法发布图片,因为雅虎开放ID提供商不工作。

所以基本上我需要有3个选择查询:

1)选择每个报告的所有报告,所有用户都拒绝“reportreq”。用简单的英语,我想要列出我们必须退役的所有报告,因为没有用户想要它。

2)选择需要报告的所有报告,批量打印小于0.这样我们就可以看到需要打印哪个报告并节省纸张而不是打印所有报告。

3)reportreq字段为空的所有报告的列表。我想我可以自己解决这个问题。

这是使用Access / VBA,数据将导出到Excel电子表格。我只是一个简单的查询,如果它存在,或者一个alogorithm快速完成它。我只是尝试制作一个“矩阵”,花了大约2个小时来填充。

  

https://docs.google.com/uc?id=0B2EMqbpeBpQkMTIyMzA5ZjMtMGQ3Zi00NzRmLWEyMDAtODcxYWM0ZTFmMDFk&hl=en_US

2 个答案:

答案 0 :(得分:0)

我建议:

SELECT DISTINCT o.reportid, o.ReportReq
FROM All_Reports AS o
WHERE o.reportid Not In (SELECT reportid FROM All_Reports
    WHERE reportreq <>"N" Or reportreq Is Null)

此查询存在问题,因为我注意到示例文档的batchprintcopies值为reportreq为null,因此这里有三种可能:

1排除reportreq为null的报告:

 SELECT reportid, SUM(batchprintcopies) FROM All_Reports
 WHERE reportreq <>"N"
 GROUP BY reportid
 HAVING Sum(batchprintcopies)>0

2 Group By reportreq允许进一步的决定:

 SELECT reportid, reportreq, Sum(batchprintcopies) AS SumOfCopies
 FROM All_Reports
 GROUP BY reportid, reporteeq
 HAVING Sum(batchprintcopies)>0

3包括reportreq为null的报告:

 SELECT reportid, SUM(batchprintcopies) FROM All_Reports
 WHERE reportreq <>"N" Or reportreq Is Null
 GROUP BY reportid
 HAVING Sum(batchprintcopies)>0

字段(列)包含零长度字符串是不太可能的,但并非不可能。我认为他们应该避免。

 SELECT reportid FROM All_Reports
 WHERE reportreq IS NULL OR reportreq = "";

答案 1 :(得分:-1)

1)此查询的工作原理是获取每个报告ID并查找有人未将其标记为“不需要”的行(假设'n'和'N'是唯一指示该方式的方法) 。如果找到该报告ID的任何行仍然是必需的。

SELECT DISTINCT report_id FROM table_name AS outer
  WHERE NOT EXISTS
    (SELECT report_id FROM table_name
    WHERE report_req NOT IN ("n","N")
      AND report_id=outer.report_id);

2)此查询只会在batchprintcopy基础上增加report_id的值(需要报告的地方,与上述假设相同)。

SELECT report_id, SUM(batchprintcopy) FROM table_name
  WHERE report_req NOT IN ("n","N")
    AND batchprintcopy > 0
  GROUP BY report_id;

3)

SELECT report_id FROM table_name
  WHERE report_req IS NULL OR report_req = "";