我有以下代碼:SQL:如何顯示不按表達式分組的列?
select O.ONO
from Customers C, Odetails Od, Orders O, Parts P
where P.PNO=Od.PNO and Od.ONO=O.ONO and O.CNO=C.CNO
group by O.ONO
order by sum(Od.QTY*P.PRICE)desc;
然而,代替選擇O.ONO
柱,我需要從不同的表中選擇C.CNAME
。我會怎麼做呢?
我有以下代碼:SQL:如何顯示不按表達式分組的列?
select O.ONO
from Customers C, Odetails Od, Orders O, Parts P
where P.PNO=Od.PNO and Od.ONO=O.ONO and O.CNO=C.CNO
group by O.ONO
order by sum(Od.QTY*P.PRICE)desc;
然而,代替選擇O.ONO
柱,我需要從不同的表中選擇C.CNAME
。我會怎麼做呢?
如果你想要的是他們的訂單和訂購然後就從
select O.ONO
...
group by O.ONO
到
select C.CName
...
group by C.CName
這將顯示用戶名和更改您的查詢的客戶名稱的列表訂單號。注意:這將多次重複的客戶名稱,因爲有該客戶
訂單還有,我的SQL查詢的首選風格是
select C.CName
from Customers C
INNER JOIN Orders O ON C.CNO = O.CNO
INNER JOIN Odetails OD ON O.ONO = OD.ONO
INNER JOIN Parts P ON OID.PNO = P.PNO
where P.PNO=Od.PNO and Od.ONO=O.ONO and O.CNO=C.CNO
group by C.CName
order by sum(Od.QTY*P.PRICE)desc;
另外一個建議,闡明你的代碼。 (請注意:我不是oracle人),在我的公司(SqlServer)中,一般情況下,您將擁有以實體命名的表,主鍵只是Id
,然後是任何以前綴命名的屬性。例如OID
是指OrderId
還是OfficeId
?
EG:
客戶:
訂單:
然後你的查詢更具可讀性:
SELECT Name
FROM Customer
INNER JOIN Order ON Customer.Id = Order.CustomerId
WHERE ...
ORDER BY Customer.Name
我唯一的問題是我需要通過'O.ONO'對它們進行分組,因爲訂單具有與它們相關的多個零件編號(Odetails的主鍵是「ONO」和「PNO」)不確定這是否有意義 – user2853262
因此包括O.ONO在select和group by子句 –
@ user2853262實際上,你*只是*想顯示列表中的客戶?或者*還*顯示列表中的訂單號碼? –
請不要這樣,
select C.CNAME from Customers C, Odetails Od, Orders O, Parts P where P.PNO=Od.PNO and Od.ONO=O.ONO and O.CNO=C.CNO group by C.CNAME order by sum(Od.QTY*P.PRICE) desc;
select語句將選擇指定的列
SELECT C.CNAME
FROM Customers C, Odetails Od, Orders O, Parts P
WHERE P.PNO=Od.PNO and Od.ONO=O.ONO and O.CNO=C.CNO
GROUP BY C.CNAME
ORDER BY sum(Od.QTY*P.PRICE)desc;
如果你想聖虐待保持O.ONO列
SELECT C.CNAME, O.ONO
FROM Customers C, Odetails Od, Orders O, Parts P
WHERE P.PNO=Od.PNO and Od.ONO=O.ONO and O.CNO=C.CNO
GROUP BY C.CNAME
ORDER BY sum(Od.QTY*P.PRICE)desc;
你應該加入一個現代風格 - 由30年過時? – Hogan
@ user2853262 Hogan的含義是'...來自Customers C INNER JOIN Orders O ON C.CNO = O.CNO ...'的連接語法更容易傳達查詢的意圖。 –