如何跨表加入?

时间:2014-10-23 14:26:27

标签: sql join ms-access-2010

所以我有一个有点复杂的数据库,我确信它可以更好地实现,但是我试图使用SQL来创建一个表,它会加入一些字段并在其他字段上使用聚合函数来返回然后我会将特定值放入报表中。

这里有五个主要表格

ALL_DATES:包含2个字段,首先是唯一ID,接下来是" MM / 1 / YYYY"格式从指定的时间点到当月。此表的目的是从左外部联接查询自2010年7月以来所有月份的PT_LEVEL表中的数据/计算。

PT_LEVEL:包含有关患者特定指标的许多字段。出于我们的目的,我们将使用[UNIT],[INF_SITE_MAJ],[SPECIF_SITE],[INF_MONTH]和[INF_YEAR]

V_GROUP_UNIT:此表有几个字段,并且创建为允许GROUP(多个)的一对多关系可以与PT_LEVEL.UNIT配对

UNIT_DATA:此表包含在某些设备或房间内花费的天数。我们需要这些数字用于即将到来的计算。

NHSN_BM:此表包含来自特定政府实体的基准数据,供我们根据PT_LEVEL进行比较。[INF_YEAR]并将再次汇总。

这是我的SQL代码,它告诉我MS Access中有语法错误(操作符缺失)。

SELECT * FROM(

SELECT 
ALL_DATES.[ALL_DATES],
V_GROUP_UNIT.[GROUP], 
PT_LEVEL.[UNIT], 
PT_LEVEL.[INF_YEAR], 
PT_LEVEL.[INF_MONTH], 
PT_LEVEL.[INF SITE MAJ], 
PT_LEVEL.[SPECIF SITE], 
Count(PT_LEVEL.[INF SITE MAJ]) AS [TOT/INF], 
Sum(UNIT_DATA.[PT_DAYS]) AS SumOfPT_DAYS, 
Sum(UNIT_DATA.[CVC_DAYS]) AS SumOfCVC_DAYS, 
Avg(NHSN_BM.[CLABSI_BM]) AS AvgOfCLABSI_BM, 
Avg(NHSN_BM.[CLABSI_UR_M]) AS AvgOfCLABSI_UR_M, 
Sum(UNIT_DATA.[IUC_DAYS]) AS SumOfIUC_DAYS, 
Avg(NHSN_BM.[CAUTI_BM]) AS AvgOfCAUTI_BM, 
Avg(NHSN_BM.[CAUTI_UR_M]) AS AvgOfCAUTI_UR_M, 
Sum(UNIT_DATA.[VENT_DAYS]) AS SumOfVENT_DAYS, 
Avg(NHSN_BM.[VAP_BM]) AS AvgOfVAP_BM, 
Avg(NHSN_BM.[VAP_UR_M]) AS AvgOfVAP_UR_M

FROM ALL_DATES 

    LEFT JOIN PT_LEVEL ON
    ALL_DATES.[ALL_MONTH] = PT_LEVEL.[INF_MONTH] AND
    ALL_DATES.[ALL_YEAR] = PT_LEVEL.[INF_YEAR],

PT_LEVEL    
    INNER JOIN UNIT_DATA ON 
    (PT_LEVEL.[UNIT] = UNIT_DATA.[UNIT]) AND
    (PT_LEVEL.[INF_MONTH] = UNIT_DATA.[MONTH]) AND 
    (PT_LEVEL.[INF_YEAR] = UNIT_DATA.[YEAR])

    INNER JOIN V_GROUP_UNIT ON 
    (PT_LEVEL.[UNIT] = V_GROUP_UNIT.[UNIT]) 

    INNER JOIN NHSN_BM ON 
    (PT_LEVEL.[UNIT] = NHSN_BM.[UNIT_LIST]) AND 
    (PT_LEVEL.[INF_YEAR] = NHSN_BM.[NHSN_BM_YEAR])

GROUP BY 
V_GROUP_UNIT.[GROUP], 
PT_LEVEL.[UNIT], 
PT_LEVEL.[INF_YEAR], 
PT_LEVEL.[INF_MONTH], 
PT_LEVEL.[INF SITE MAJ], 
PT_LEVEL.[SPECIF SITE]

HAVING 
(((PT_LEVEL.[INF SITE MAJ]) In ("VAE","BSI","UTI")) AND 
((PT_LEVEL.[SPECIF SITE]) In ("CLABSI","CAUTI","VAC","IVAC","POSSIBLE VAP","PROBABLE VAP")))

ORDER BY 
V_GROUP_UNIT.[GROUP], 
PT_LEVEL.[UNIT], 
PT_LEVEL.[INF_YEAR], 
PT_LEVEL.[INF_MONTH], 
PT_LEVEL.[INF SITE MAJ]

) AS QUERY1;

我认为我搞砸的地方主要是尝​​试使用两个父表,但任何见解都会有所帮助。

1 个答案:

答案 0 :(得分:0)

逗号和额外" PT_LEVEL"看起来对我不对:

    LEFT JOIN PT_LEVEL ON
    ALL_DATES.[ALL_MONTH] = PT_LEVEL.[INF_MONTH] AND
    ALL_DATES.[ALL_YEAR] = PT_LEVEL.[INF_YEAR],

PT_LEVEL    
    INNER JOIN UNIT_DATA ON 
    (PT_LEVEL.[UNIT] = UNIT_DATA.[UNIT]) AND
    (PT_LEVEL.[INF_MONTH] = UNIT_DATA.[MONTH]) AND 
    (PT_LEVEL.[INF_YEAR] = UNIT_DATA.[YEAR])

如果用以下内容替换它会怎样:

LEFT JOIN PT_LEVEL ON
ALL_DATES.[ALL_MONTH] = PT_LEVEL.[INF_MONTH] AND
ALL_DATES.[ALL_YEAR] = PT_LEVEL.[INF_YEAR]

INNER JOIN UNIT_DATA ON 
(PT_LEVEL.[UNIT] = UNIT_DATA.[UNIT]) AND
(PT_LEVEL.[INF_MONTH] = UNIT_DATA.[MONTH]) AND 
(PT_LEVEL.[INF_YEAR] = UNIT_DATA.[YEAR])