2017-01-10 9 views
0

誰かが間違っていることを私に説明できますか?私は完全にこれで新しく、私は何をすべきかわかりません。列「INVOICE.DATE_OF_ISSUE」は、集計関数またはGROUP BY句のいずれにも含まれていないため、ORDER BY句では無効です

私はインボイスを表示しようとしています.nr_invoiceと1995年7月24日から1995年7月24日までに発行されたインボイス値で、正味額が50を超えています。

SELECT INVOICE.NR_INVOICE, COUNT(COMMODITY.PRICE) 
FROM INVOICE FULL JOIN LINE_INVOICE ON INVOICE.NR_INVOICE = LINE_INVOICE.FNR_INVOICE 
LEFT JOIN COMMODITY ON LINE_INVOICE.FID_TOWAR = COMMODITY.ID_COMMODITY 
WHERE INVOICE.DATE_OF_ISSUE BETWEEN '1995-07-17' AND '1995-07-24' 
    and COMMODITY.PRICE > 50 
GROUP BY INVOICE.NR_INVOICE 
ORDER BY INVOICE.DATE_OF_ISSUE 

はここでエラー

コラム「INVOICE.DATE_OF_ISSUE」それは、集計関数またはGROUP BY句に含まれていないので、ORDER BY句では無効です。

答えて

2

外はこのクエリの結合を使用する理由はありません。あなたのwhere句は、とにかくそれを内側の結合に変えています。あなたの特定の問題を解決するために

、あなたがGROUP BYDATE_OF_ISSUEを含めたり、集計関数を使用するか必要があります。

SELECT i.NR_INVOICE, COUNT(c.PRICE) 
FROM INVOICE i JOIN 
    LINE_INVOICE li 
    ON i.NR_INVOICE = li.FNR_INVOICE JOIN 
    COMMODITY c 
    ON li.FID_TOWAR = c.ID_COMMODITY 
WHERE i.DATE_OF_ISSUE BETWEEN '1995-07-17' AND '1995-07-24' AND 
     c.PRICE > 50 
GROUP BY i.NR_INVOICE, i.DATE_OF_ISSUE 
ORDER BY i.DATE_OF_ISSUE; 

EDIT:

あなたの具体的な質問がある:

I 1995年7月17日から1995年7月24日まで として発行された請求書:nr_invoiceと請求書の値を表示しようとしています。正味額がそれ以上の場合はです= 50、すべて日付でソートされています。

このため、クエリはHAVINGを使用します。

SELECT i.NR_INVOICE, SUM(c.PRICE) 
FROM INVOICE i JOIN 
    LINE_INVOICE li 
    ON i.NR_INVOICE = li.FNR_INVOICE JOIN 
    COMMODITY c 
    ON li.FID_TOWAR = c.ID_COMMODITY 
WHERE i.DATE_OF_ISSUE BETWEEN '1995-07-17' AND '1995-07-24' 
GROUP BY i.NR_INVOICE, i.DATE_OF_ISSUE 
HAVING SUM(c.PRICE) > 50 
ORDER BY i.DATE_OF_ISSUE; 

注:請求書の行に数量値を持っている場合は、あなたのアカウントにそれを取る必要があります。

1

この列はGROUPINGにないため(エラーが示すように)使用できません。あなたは列の集計で(あなたのニーズに基づいて最小または最大)でも注文することができます。このように:

SELECT INVOICE.NR_INVOICE, COUNT(COMMODITY.PRICE) 
FROM INVOICE FULL JOIN LINE_INVOICE ON INVOICE.NR_INVOICE = LINE_INVOICE.FNR_INVOICE 
LEFT JOIN COMMODITY ON LINE_INVOICE.FID_TOWAR = COMMODITY.ID_COMMODITY 
WHERE INVOICE.DATE_OF_ISSUE BETWEEN '1995-07-17' AND '1995-07-24' 
    and COMMODITY.PRICE > 50 
GROUP BY INVOICE.NR_INVOICE 
ORDER BY MIN(INVOICE.DATE_OF_ISSUE) 
+0

ありがとうございました。今私は間違っていることを知っている。 Order By節では、私はagregate関数を正しく使用しなければなりませんか? –

1
SELECT INVOICE.NR_INVOICE, COUNT(COMMODITY.PRICE) 
FROM INVOICE FULL JOIN LINE_INVOICE ON INVOICE.NR_INVOICE = LINE_INVOICE.FNR_INVOICE 
LEFT JOIN COMMODITY ON LINE_INVOICE.FID_TOWAR = COMMODITY.ID_COMMODITY 
WHERE INVOICE.DATE_OF_ISSUE BETWEEN '1995-07-17' AND '1995-07-24' 
    and COMMODITY.PRICE > 50 
GROUP BY INVOICE.NR_INVOICE 
ORDER BY min(INVOICE.DATE_OF_ISSUE) 
関連する問題