我需要回傳所有 cli_id 有錯誤 cli_billstat 的 m_id。然后我需要按 cli_id 的最大計數排序到最少。
我的查詢回傳了我需要的資訊,但我無法按照我想要的方式通過 cli_id 獲得它。
我的代碼:
SELECT CLIENT.CLI_ID, CLI_FNAME, CLI_LNAME, CLI_BILLSTAT, M_ID, M_DATE
FROM CLIENT, MEETING
WHERE CLIENT.CLI_ID = MEETING.CLI_ID
AND CLI_BILLSTAT = False
GROUP BY CLIENT.CLI_ID, CLI_FNAME, CLI_LNAME, CLI_BILLSTAT, M_ID, M_DATE\\\
in the cli_id column it returns
cli_id
10
10
14
21
21
21
what I need is something like:
cli_id
21
21
21
10
10
14
22
我嘗試添加 COUNT(client.cli_id) AS COUNT 然后 ORDER BY COUNT,但它沒有改變結果。
uj5u.com熱心網友回復:
您必須使用子查詢,本質上是重復連接查詢,如下所示:
select
S1.CLI_ID,
S1.CLI_FNAME,
S1.CLI_LNAME,
S1.CLI_BILLSTAT,
S1.M_ID,
S1.M_DATE,
S1.Cnt
from
(SELECT ClntA.CLI_ID,
ClntA.CLI_FNAME,
ClntA.CLI_LNAME,
ClntA.CLI_BILLSTAT,
MtgA.M_ID,
MtgA.M_DATE,
(select count(*)
from CLIENT ClntB
Inner Join
MEETING MtgB
on ClntB.CLI_ID = MtgB.CLI_ID
WHERE ClntB.CLI_BILLSTAT = False
AND ClntB.cli_id=ClntA.cli_id) as Cnt
FROM
CLIENT ClntA
Inner Join
MEETING MtgA
on ClntA.CLI_ID = MtgA.CLI_ID
WHERE ClntA.CLI_BILLSTAT = False
) S1
order by S1.cnt desc, S1.cli_id;
在大多數其他現代 dbms 產品中,這可以通過視窗函式來實作,但 MsAccess SQL 缺少它們。
如果 CLI_ID 是 CLIENT 表的主鍵,則可以顯著縮短子查詢。如果是這種情況,子查詢只能計算來自 MEETING 且 MtgB.CLI_ID=ClntA.CLI_ID 的記錄(子查詢中不需要 JOIN 或 WHERE CLI_BILLSTAT)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/468359.html
