2016-04-14 56 views
0

我正在處理Oracle中的SQL賦值。有兩張桌子。關於連接表的SQL賦值

table1中被稱爲Person10:

領域包括:身份證,FNAME,LNAME,州衛生署,JOBTITLE,工資,貓。

表2被稱爲將stateInfo:

領域包括:國家,Statename的,資本,暱稱,Pop2010,POP2000,po​​p1990,sqmiles。

問:

Create a view named A10T2 that will display the StateName, Capital and Nickname of the states that have at least 25 people in the Person10 table with a Cat value of N and an annual salary between $75,000 and $125,000. The three column headings should be StateName, Capital and Nickname. The rows should be sorted by the name of the state.

我有什麼:

CREATE VIEW A10T2 AS 
SELECT StateName, Capital, Nickname 
FROM STATEINFO INNER JOIN PERSON10 ON 
    STATEINFO.STATE = PERSON10.STATE 
WHERE Person10.CAT = 'N' AND 
     Person10.Salary in BETWEEN (75000 AND 125000) AND 
     count(Person10.CAT) >= 25 
ORDER BY STATE; 

它給了我一個錯誤說缺少表達。我可能需要一個團體的表達......但我不知道我做錯了什麼。

+0

請問您可以發佈詳細的錯誤消息嗎? – Dresden

回答

1

是啊,我本來搞砸這件事,當我第一次回答了這個,因爲它是在飛行中,我並沒有機會來測試什麼,我放下。我忘了使用GROUP BY更適合集合函數(就像選擇SUM,AVG和COUNT一樣),這可能是它拋出錯誤的原因。在這種情況下使用ORDER BY可能是正確的選擇。而且你想按照狀態排列你的結果,所以你可以使用StateName。

SELECT S.StateName, S.Capital, S.Nickname 
FROM STATEINFO S 
INNER JOIN PERSON10 P ON S.STATE = P.STATE 
WHERE P.CAT = 'N' 
AND P.Salary BETWEEN 75000 AND 125000 
ORDER BY S.StateName 
HAVING count(P.CAT) >= 25; 
+0

嗨。感謝您的解決方案,但我仍然收到錯誤說「不是一個GROUP BY表達式」 – Anthony

+0

這將是一個更好的答案,如果你有一些解釋。僅由代碼組成的答案通常不會對其他用戶有幫助。 –

+0

Ehh..still給我錯誤:「不是一組表達式」 – Anthony

0

我不是甲骨文專家,但我敢肯定

Person10.Salary in BETWEEN (75000 AND 125000) 

應該

(無IN並沒有括號)。這就是我所知道的所有其他SQL方言的工作方式。

此外,從WHERE條款移動COUNT()HAVING條款:

CREATE VIEW A10T2 AS 
SELECT StateName, Capital, Nickname 
FROM STATEINFO INNER JOIN PERSON10 ON 
    STATEINFO.STATE = PERSON10.STATE 
WHERE Person10.CAT = 'N' AND 
     Person10.Salary BETWEEN 75000 AND 125000 
ORDER BY STATE 
HAVING count(Person10.CAT) >= 25; 
0

您可以嘗試使用這樣的子查詢。

CREATE VIEW A10T2 AS 
SELECT statename, capital, nickname 
FROM stateinfo 
WHERE statename IN (SELECT statename 
        FROM person10 
        WHERE Cat = 'N' 
        AND Salary BETWEEN 75000 AND 125000 
        GROUP BY statename 
        HAVING COUNT(*) >= 25) 
ORDER BY statename 
+0

非常感謝。我從來沒有想過這可以通過嵌套選擇語句來完成。 – Anthony

+0

Hi @AyazAmir如果這個或任何答案已經解決了您的問題,請點擊複選標記,考慮[接受它](http://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 – Roberto