我在1个月前开始使用访问权限,我实际上正在制作预防医学工具,以便他们可以使用他们实际纸质表格的数字版本。
虽然该程序即将完成,但是现在请求它的医生想要将患者的所有数据(以及该治疗期间使用的所有药物在一行中)输出到excel(简单部分)(问题)
我一直在争论两天,在谷歌上尝试和研究,但我所能找到的是如何将列中的值放在单个单元格中,而这不是必须如何显示。
到目前为止,我最好的尝试(远非一个好的尝试)就是这样的:
CREATE TABLE Patient
(`SIP` int, `name` varchar(10));
INSERT INTO Patient
(`SIP`, `name`)
VALUES
(70,'John');
-- A patient can have multiple treatments
CREATE TABLE Treatment
(`id` int, `SIPFK` int);
INSERT INTO Treatment
(`id`,`SIPFK`)
VALUES
(1,70);
-- A treatment can have multiple medicines used while it's open
CREATE TABLE Medicine
(`Id` int, `Name` varchar(8), `TreatFK` int);
INSERT INTO Medicine
(`Id`, `Name`, `TreatFK`)
VALUES
(7, 'Apples', 1),
(7, 'Tomatoes', 1),
(7, 'Potatoes', 1),
(8, 'Banana', 2),
(8, 'Peach', 2);
-- The query
select c.id, c.Name, p.id as id2, p.Name as name2, r.id as id3, r.Name as name3
from Medicine as c, Medicine as p, Medicine as r
where c.id = 7 and p.id=7 and r.id=7;
我试图获得的输出是:
7 | Apples | 7 | Tomatoes | 7 | Potatoes
表药将有更多的列,我需要显示与治疗相关的每一行以及治疗。
但值继续在不同的行上重复,除了第一列之外的后续列上的输出不是预期的。此外,GROUP BY无法解决问题,DISTINCT也无法解决问题。
查询的输出如下:sqlfiddle.com
如果有人能给我一个提示,我将不胜感激。
编辑:由于访问是一个derp,不会让我使用任何好的SQL修复,也不会识别DISTINCT使查询中的数据不重复,我会尝试搜索直接组织行的方法导出的excel。谢谢大家的帮助,我会保存它,因为我相信它会让我节省数小时的时间。
答案 0 :(得分:0)
这有点问题,因为MS Access不支持递归CTE,我没有看到没有排名的方法。
因此,我试图通过使用排序Medicines
的子查询来重现结果
并将这些存储到临时表中。
create table newtable
select c.id
, c.Name
,(SELECT COUNT(T1.Name) FROM Medicine AS T1 WHERE t1.id=c.id and T1.Name >= c.Name) AS Rank
from Medicine as c;
之后,这很简单,因为我的查询主要基于Ranks
和IDs
。
select distinct id
,(select Name from newtable t2 where t1.id=t2.id and rank=1) as firstMed
,(select Name from newtable t2 where t1.id=t2.id and rank=2) as secMed
,(select Name from newtable t2 where t1.id=t2.id and rank=3) as ThirdMed
from newtable t1;
据我所知,SELF JOIN
概念和recursive CTE's
的概念是这个特定例子最重要的一点,一个好的做法就是对这些概念进行研究。