0

我有点卡住了。我手头没有当前的 SQL,但我会尽量说清楚。假设我有一张学生 ID 表以及课程编号和成绩。我只想返回成绩不等于 A 的学生。我不想要不等于 A 的行,但我试图找到所有没有关联 A 成绩的学生 ID,否则学生至少有一个 A不会被退回。

我该如何解决这个问题?我对 SQL 很陌生。谢谢

编辑:好的,现在我有了实际的 SQL,我可以放弃我可怕的类比了。

SELECT  ALL
        ITEMS.QTY_ONHAND AS QTY_ONHAND,
        ITEMS.ITEM_ID AS ITEM_ID_I0,
        MEDORDER.MO_STAT AS MOMO_STAT,
        UPPER(ITEMS.ITEM_ID) AS ITEM_ID_IC,
        ITEMS.RX_DISP AS RX_DISP,
        OMNIS.OMNI_ID AS OMNI_ID,
        MEDORDER.ITEM_ID AS MOITEM_ID
  FROM   ITEMS ITEMS,
         MEDORDER MEDORDER,
         OMNIS OMNIS,
        "PATIENTS" PATIENTS
  WHERE (ITEMS.OMNI_STID = OMNIS.OMNI_STID) AND 
        (PATIENTS.PAT_ID = MEDORDER.PAT_ID) AND 
        (OMNIS.AREA = PATIENTS.AREA) AND (UPPER(ITEMS.ITEM_NAME) LIKE '%Doxycycline%'
     AND MEDORDER.ITEM_ID = UPPER(ITEMS.ITEM_ID)
     AND MEDORDER.MO_STAT='A')
  ORDER BY  ITEMS.QTY_ONHAND DESC, OMNIS.OMNI_ID, MEDORDER.ITEM_ID

我这里有一个位置,omni_id。我的查询正在查找具有此 item_id 的每个omni_id。这将为每个omni_id 返回多个结果,这些结果对应于同一item_id 的多个medorders。我想要做的,只是返回对于任何 medorder.mo_stat 等于 'A' 的结果为 0 的 omni_ids。例如,omni_id 3W 将有 3 个返回,其中 medorder_mo_stat 等于 A、C 和 C。另一个是 4S,其 medorder.mo_stats 为 C、C、C。我只希望我的查询返回该 4S 组,因为它没有“A”的medorder.mo_stats。

抱歉解释不好..我现在正在处理几个项目,而且我的 SQL-fu 不是很强大,我不确定如何实施以下解决方案来获得我想要的东西。

提前致谢

4

1 回答 1

0

根据您的更新 - 我认为这可能会有所帮助,但我仍然不确定我是否理解您的架构,所以也许我遗漏了一些东西......

SELECT
    OMNIS.OMNI_ID AS OMNI_ID,
    COUNT(MEDORDER.ITEM_ID) AS A_COUNT
FROM
    ITEMS
JOIN
    OMNIS
    ON  (ITEMS.OMNI_STID = OMNIS.OMNI_STID)
JOIN
    PATIENTS
    ON  (OMNIS.AREA = PATIENTS.AREA)
LEFT JOIN
    MEDORDER
    ON  (MEDORDER.ITEM_ID = UPPER(ITEMS.ITEM_ID)
    AND (PATIENTS.PAT_ID = MEDORDER.PAT_ID)
    AND (MEORDER.MO_STAT = 'A')
WHERE
    UPPER(ITEMS.ITEM_NAME) LIKE '%Doxycycline%'
GROUP BY
    OMNIS.OMNI_ID
HAVING
    COUNT(MEDORDER.ITEM_ID) = 0

^编辑^


失去了解决这个问题的方法。我会这样做:

SELECT
    StudentID,
    MAX(CASE Grade WHEN 'A' THEN 1 ELSE 0 END) AS HasAnA
FROM
    MyTable
GROUP BY
    StudentID
HAVING
    MAX(CASE Grade WHEN 'A' THEN 1 ELSE 0 END) = 0

甚至只是这取决于您的桌子设计:

SELECT DISTINCT
    StudentID
FROM
    MyTable
WHERE
    Grade != 'A'
于 2012-12-29T20:15:30.427 回答