2011-12-08 12 views
0

私はmysqlからsqlサーバーに変換しています。 SQLストアドプロシージャが選択リストエラーで無効になっています

選択ストアドプロシージャを変換しながら

CREATE PROCEDURE selPropertyByAcntID 
(
@in_acntID INT 
) 
AS 
SELECT * 
    , SUM(CASE 
         WHEN u.prop_id IS NOT NULL THEN 1 
         ELSE 0 
       END) AS UnitCount 
FROM 
    prop_details d 
INNER JOIN 
    acnt_property a 
ON 
    d.prop_id = a.prop_id 
LEFT JOIN 
    unit_details u 
ON 
    d.prop_id = u.prop_id 
WHERE 
    a.group_id = @in_acntID 
GROUP BY 
    d.prop_id; 
それは、次のエラー投げている

:それはあるので、8120重大度16 列「prop_details.prop_title」選択リストでは無効です:

エラー集計関数またはGROUP BY句のいずれのコンテナでもありません。

strange - mysql環境でまったく同じストアドプロシージャが動作しています。

これに関するお手伝いがあります。 SQL ServerとあなたがGROUP BYリストまたは集計に包まれたものに含まれているSELECTリスト項目にのみ含めることができますMySQLのを除くほぼすべてのRDBMS

答えて

3

ので、問題は*を取り除く解決テーブルdaから必要な列だけを選択して、SQL ServerとGROUP BY

0

にも、このリストを追加する(私は実際にはほとんどのRDBMSを考え... )ステートメントはGROUP BYで、集約関数とともに集約列のみを含めることができます。たとえば、これは動作します:

SELECT ColumnA, SUM(ColumnB) TotalCount 
FROM Table 
GROUP BY ColumnA; 

しかし、これはないだろう:

SELECT ColumnA, ColumnC, ColumnD, SUM(ColumnB) TotalCount 
FROM Table 
GROUP BY ColumnA; 

ColumnCColumnDがグループ化されていないので。

0

*が選択されていますが、prop_idでグループ化されているだけです。 *d.prop_idに変更すると、あなたはすばらしくなるはずです。他の列が必要な場合は、それらをselectおよびgroupで指定します。

1

ご質問には関係ありません。この部分は:

, SUM(CASE 
       WHEN u.prop_id IS NOT NULL THEN 1 
       ELSE 0 
     END) AS UnitCount 

がに簡素化することができます。

, COUNT(u.prop_id) AS UnitCount 
+0

ypercubeこんにちは、私はそれを試してみましたが、それは対数で設定しただけで、単一のデータ、場合でもCOUNT = 0完全なデータセットを返しました。 – Rick

関連する問題