连续放置不同的行

时间:2013-11-28 10:01:06

标签: sql ms-access

我在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。

谢谢大家的帮助,我会保存它,因为我相信它会让我节省数小时的时间。

1 个答案:

答案 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;

之后,这很简单,因为我的查询主要基于RanksIDs

 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的概念是这个特定例子最重要的一点,一个好的做法就是对这些概念进行研究。

供参考:http://sqlfiddle.com/#!2/f80a9/2