0

私は少し立ち往生しています。現在の SQL は手元にありませんが、明確にしようと思います。コース番号とその成績とともに学生 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 を探しています。これにより、同じ item_id の複数の medorder に対応する各 omni_id の複数の結果が返されます。私がやりたいことは、「A」に等しい medorder.mo_stat の結果が 0 である omni_ids のみを返すことです。たとえば、omni_id 3W には 3 つの戻り値があり、medorder_mo_stat は A、C、および C に等しくなります。また、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 に答える