0

Win2000 Server SQL Server 2000 v8.00.760で実行されている古いデータベースからデータを取得しようとしていますが、エラーが発生します。私のクエリは、私が使用している現在のデータベースで機能していますが、それが問題である場合、逆比較できない、私が何をしているのかわかりません。

これが私のクエリです:

SELECT o.CustomerID, o.ShipName, o.ShipCity, o.ShipStateOrProvince, o.ShipPostalCode, o.ShipPhoneNumber, c.Profession, SUM( o.Total ) 
FROM Orders o

JOIN Customers c ON o.CustomerID = c.CustomerID

WHERE (o.OrderDate >= '2012-01-01')
AND (o.Void <> - 1)
AND (o.Cancelled <> - 1)

GROUP BY o.CustomerID

MySQLでは正常に動作しています。クエリを希望どおりに戻しています。しかし、エラーが発生します... ここに画像の説明を入力してください

古いSQLバージョンで試してみると。

私は今ここでちょっと迷っています。誰かが私が間違っていることを教えてもらえますか?

ありがとう!

4

2 に答える 2

3

SQL Serverは、MySQLよりもGROUPBYについてはるかに厳密です。SELECT句のすべての非集計列は、GROUPBYにも表示される必要があります。これにより、たとえば、特定のCustomerIDに複数のShipName値がある場合に発生する可能性のあるあいまいさが回避されます。MySQLは任意に1つを選択しますが、SQLServerはそれらを別々の行として扱うように強制します。

SELECT o.CustomerID, o.ShipName, o.ShipCity, o.ShipStateOrProvince, o.ShipPostalCode, o.ShipPhoneNumber, c.Profession, SUM( o.Total ) 
FROM Orders o

JOIN Customers c ON o.CustomerID = c.CustomerID

WHERE (o.OrderDate >= '2012-01-01')
AND (o.Void <> - 1)
AND (o.Cancelled <> - 1)

GROUP BY o.CustomerID, o.ShipName, o.ShipCity, o.ShipStateOrProvince, o.ShipPostalCode, o.ShipPhoneNumber, c.Profession
于 2012-04-16T17:56:54.983 に答える
2

SQL Serverでは、集計関数がある場合に各フィールドを句にSELECT含めるGROUP BY必要があるため、すべてのフィールドを次の項目に追加する必要がありますGROUP BY

SELECT o.CustomerID
    , o.ShipName
    , o.ShipCity
    , o.ShipStateOrProvince
    , o.ShipPostalCode
    , o.ShipPhoneNumber
    , c.Profession
    , SUM( o.Total ) 
FROM Orders o
JOIN Customers c 
    ON o.CustomerID = c.CustomerID
WHERE (o.OrderDate >= '2012-01-01')
    AND (o.Void <> - 1)
    AND (o.Cancelled <> - 1)
GROUP BY o.CustomerID
    , o.ShipName
    , o.ShipCity
    , o.ShipStateOrProvince
    , o.ShipPostalCode
    , o.ShipPhoneNumber
    , c.Profession
于 2012-04-16T17:56:43.440 に答える