我有点卡住了。我没有当前的SQL方便,但我会尽力清楚。说我有一张学生证的表格,以及课程编号和成绩。我想只返回没有等于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的多个medorder。我想要做的只是返回omni_ids,其中任何medorder.mo_stat等于'A'的结果为0。例如,omni_id 3W将有3个返回,wth medorder_mo_stat等于A,C和C.另外,4S,具有C,C,C的medorder.mo_stats。我只希望我的查询返回该4S组,因为它没有'A'的medorder.mo_stats。
对不好的解释感到抱歉..我现在正在进行一些项目的多任务处理,我的SQL-fu不是很强大,我不确定如何实现以下解决方案来获得我正在寻找的东西。< / p>
提前感谢
答案 0 :(得分: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
^ EDIT ^
解决这个问题的方法很少。我会这样做:
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'