SQL查询 - 连接+计数

时间:2014-02-05 09:37:18

标签: sql join count oracle11g

这是我的问题:我有一个连接多个表的查询来显示某些订单的详细信息。查询结果在包含列的表中:

order ID | name | count | price | location | date

这是一个医院数据库,我想要做的是添加另一个专栏,说明在给定日期有多少患者在该地点。

还有另一张表显示患者住院 - 我需要计算这些数据。

patient ID | location | dateFrom | dateTo

问题是STAYS表显示了2个日期 - FROM和TO所以我需要计算在下订单时在给定位置(病房)出现的每个患者。

这是我需要更新的初始查询:

SELECT 
    AP_ZAMPOZ.ID_TOW AS IDTowaru, --merchandiseID
    GMSL_TOW.NAZWA_TOW AS Nazwa, --name
    GMSL_TOW.MNOZNIK_SYN AS Mnoznik, --quantity
    AP_ZAMPOZ.ZAM_CENA_S AS Cena, --price
    AP_ZAMPOZ.ZAM_IL AS Ilosc, --count
    AP_ZAMNAG.ZAM_DATE AS DataZam, --date
    GMSL_MAG.NAZWA_MAG AS Magazyn, --location
    APSL_TOW_PROD.PROD_NAZWA AS Producent, --producer
    APSL_TOW_ATC.NAZWA AS Grupa -group
FROM 
    AP_ZAMPOZ
JOIN 
    GMSL_TOW ON AP_ZAMPOZ.ID_TOW = GMSL_TOW.ID_TOW 
JOIN 
    AP_ZAMNAG ON AP_ZAMNAG.ZAM_ID_NAG = AP_ZAMPOZ.ZAM_ID_NAG
JOIN 
    GMSL_MAG ON AP_ZAMNAG.ID_MAG = GMSL_MAG.ID_MAG
JOIN 
    APSL_TOW ON AP_ZAMPOZ.ID_TOW = APSL_TOW.ID_TOW
LEFT JOIN 
    APSL_TOW_PROD ON APSL_TOW.ID_PROD = APSL_TOW_PROD.ID_PROD
LEFT JOIN 
    APSL_TOW_ATC ON APSL_TOW.KOD = APSL_TOW_ATC.KOD

包含stays的表名为POBYT,并包含以下相关列:

| ID_POB (ID) | IDK_JOS (location identifier) | DT_OD (date From) | DT_TO (date To)

我希望看到的行应该与我目前的查询中的行数相似+给定地点的患者数量。

任何人都有任何想法如何实现这一目标?我被卡住了......

1 个答案:

答案 0 :(得分:0)

通过将子查询添加为另一个SELECT列来解决问题。 继承人的代码

SELECT

.
.
.
 APSL_TOW_ATC.NAZWA AS Grupa

(SELECT Count(*)
FROM pobyt 
WHERE (TO_DATE( AP_ZAMNAG.ZAM_DATE, 'YY/MM/DD')  >= TO_DATE(DT_OD, 'YY-MM-DD') AND (TO_DATE( AP_ZAMNAG.ZAM_DATE, 'YY/MM/DD')  <= TO_DATE(DT_DO, 'YY-MM-DD') OR dt_do IS NULL))
AND IDK_JOS = GMSL_MAG.KOD_MAG) AS LiczbaPacjentow --no. of patients at given date

FROM AP_ZAMPOZ
.
.
.

效果很好。