※ 引述《donkeychen (Bad_To_The_Bone)》之銘言:
: table SPJ(SNO,PNO,JNO,QTY)
: table S(SNO,SNAME)
: SNO PNO JNO QTY
: ---------------
: S1 P2 J1 400
: S2 P2 J1 300
: S2 P2 J2 300
: SNO SNAME
: ---------------
: S1 Peter
: S2 John
: 上面兩個Table
: 我取我有問題的部分請教
: S為供貨商
: P為產品
: J為計畫
: 如要查詢供給P2產品最多供應商的名稱
: 由上面資料可以知道應該是S2 John供應了600為最多
: 請問這樣該如何達成呢
: 我想大概是用巢狀SELECT
: 但是好像怪怪的
: ------------------
: 我用了access試
: SELECT MAX(TOTAL) as MAX_P2
: FROM(
: SELECT SUM(QTY) AS TOTAL
: FROM SPJ
: WHERE PNO='P2'
: GROUP BY SNO
: )
: ;
: 可以得到
: MAX_P2
: ------
: 600
: ------------------
: 但是因為要串接SNAME與S表格的關係
: 我試了
: SELECT SNO,MAX(TOTAL) as MAX_P2
: FROM(
: SELECT SNO,SUM(QTY) AS TOTAL
: FROM SPJ
: WHERE PNO='P2'
: GROUP BY SNO
: )
: ;
: 會顯示不知道SNO是什麼
如果是SQL Server
解決錯誤訊息應該是你的FROM 子查詢table設個別名就可以了
: SELECT M.SNO,MAX(M.TOTAL) as MAX_P2
: FROM(
: SELECT SNO,SUM(QTY) AS TOTAL
: FROM SPJ
: WHERE PNO='P2'
: GROUP BY SNO
: ) M
: SELECT G_SNO,MAX(TOTAL) as MAX_P2
: FROM(
: SELECT SNO AS G_SNO,SUM(QTY) AS TOTAL
: FROM SPJ
: WHERE PNO='P2'
: GROUP BY SNO
: )
: ;
: 一樣不能
: 目標是
: SELECT SNAME
: FROM S
: WHERE SNO IN (
: SELECT SNO
: FROM(
: 一個有已經查到MAX(SUM(QTY))
: )
: );
: 在用SNO串的地方卡住了
: 思維不清晰還請大家幫忙
: 感謝大家
只抓第一筆
SELECT S.SNAME,SPJ.PNO,SUM(SPJ.QTY)
FROM S,SPJ
WHERE S.SNO=SPJ.SNO
AND SPJ.PNO='P2'
GROUP BY S.SNAME,SPJ.PNO
ORDER BY 3 DESC
or
SELECT S.SNAME,SPJ.PNO,SUM(SPJ.QTY) TOTAL
INTO AAA
FROM S,SPJ
WHERE S.SNO=SPJ.SNO
AND SPJ.PNO='P2'
GROUP BY S.SNAME,SPJ.PNO
SELECT SNAME,PNO,TOTAL
FROM AAA
WHEER TOTAL=(SELECT MAX(TOTAL) FROM AAA)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.128.36