Sql 连续放置不同的行

Sql 连续放置不同的行,sql,ms-access,Sql,Ms Access,大约一个月前,我开始使用access,我实际上正在为预防医学制作一个工具,这样他们就可以使用实际纸质表格的数字版本 当程序即将完成时,请求该程序的医生现在希望将患者治疗期间的所有数据以及治疗期间使用的所有药物导出到excel(简单部分)(问题) 两天来,我一直在为此绞尽脑汁,试图在谷歌上搜索,但我能找到的只是如何在单个单元格中输入列中的值,而不是如何显示 到目前为止,我最好的尝试(远不是一次好的尝试)是这样的: CREATE TABLE Patient (`SIP` int, `name

大约一个月前,我开始使用access,我实际上正在为预防医学制作一个工具,这样他们就可以使用实际纸质表格的数字版本

当程序即将完成时,请求该程序的医生现在希望将患者治疗期间的所有数据以及治疗期间使用的所有药物导出到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
表格药物将有更多的列,我需要在一行中显示与治疗相关的每一行以及治疗

但是这些值在不同的行上不断重复,并且除了第一列之外,后续列上的输出并不像预期的那样。此外,分组方式也无法解决问题,而且DISTINCT也不起作用

查询的输出如下所示:

如果有人能给我一个提示,我将不胜感激

编辑:由于access是一个derp,不允许我使用任何好的SQL修复程序,也不允许识别DISTINCT以使查询中的数据不会重复,因此我将尝试搜索一种方法,直接在导出的excel中组织行


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

这是一个小问题,因为MS Access不支持递归CTE,我不认为没有排名就可以做到这一点。 因此,我尝试使用对
药物进行排序的子查询来重现结果
并将其存储到临时表中

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;
之后,这很容易,因为我的查询主要基于
等级
ID

 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;
据我所知,
自连接
概念和
递归CTE的概念
是该特定示例中最重要的一点,一个好的做法是对其进行研究


参考:

这里可能有一个问题,为什么医学部希望它排在一行?虽然我承认Excel有一些出色的功能,可以连续做一些事情……但我不能完全确定他的原因。他说,如果他想制作图表,将数据放在不同的行中会把事情搞得一团糟,而且在一行中分析数据会更容易。呃,我很确定Excel仍然主要是按行运行的。事实上,考虑到它如何与dbs交互,我敢打赌每行操作会更容易。。。我敢打赌,他的工作流中有一个数据透视表(用于翻转数据),他不想处理添加/删除数据透视表的问题。或者类似的事情。刚和他谈过,他说他想把它用于统计计算,每次治疗只有一排。我想你是对的,使用excel你可以更轻松地完成这项工作,但我也没有太多使用excel的工作,所以我想我必须立即开始使用excel来找到解决方法。但是,如果患者收到的药物/任何东西比他编程的多,这项工作就会失败。如果他能得到一个严格的上限,就可以这样作弊。但对于这样的事情,慢性护理可能发生在哪里?太可能添加一个额外的项目…我认为这实际上可能有效,因为这是预防性药物,他们不太可能使用超过他们指定的9种药物。但话说回来,这是否适用于更多的列,或者我是否应该为我要添加的每个列重新创建代码。在我的场景中,只包括3种药物,因此您必须添加所需数量的药物。但是,我对MS Access中使用的SQL不太熟悉,也许有更有效的方法可以排除硬编码,希望有人能分享。这是MS SQL中动态执行的方法,但我不确定如何为MS Access修改它:嗯,Access不会让我做整个“创建新表”的事情,分离查询仍在继续,并复制数据。我想我必须按照钟表公司说的去做,试着更有效地处理这个问题。无论如何,谢谢你的帮助,我从代码中学到了至少3个新东西。