0

mem_loanとsharesの2つのテーブルがあります。mem_loanテーブルにはDATEという名前の列があり、共有にはnoofsharesという名前の列があります。mem_loanの主キーは、共有テーブルの外部キーではありません。次のクエリを使用したいのですが、エラーが発生します。

SELECT SUM(noofshares),year(convert(datetime,mem_loan.dos,105)) 
FROM shares s,mem_loan ml 
JOIN mem_loan ON mem_loan.loan_acno = shares.loan_acno 
WHERE year(convert(datetime,dos,105))=year(getdate())

エラーは次のとおりです。

列'mem_loan.DOS'は、集計関数またはGROUP BY句のいずれにも含まれていないため、選択リストでは無効です。

私を助けてください

4

6 に答える 6

4

エラーメッセージに示されているように、集計関数に含まれていない列をGROUPBYする必要があります。

ただし、サンプルSQLには他のエラーもあるようです。特に、mem_loanテーブルを2回インクルードしましたが、結合条件は1つだけなので、クロス結合が実行されます。これがあなたの言っていることである可能性は低いです。

于 2012-04-18T13:47:32.780 に答える
1

これを試して

SELECT SUM(noofshares),year(convert(datetime,mem_loan.dos,105)) 
FROM shares s,mem_loan ml JOIN mem_loan ON mem_loan.loan_acno=shares.loan_acno 
where year(convert(datetime,dos,105))=year(getdate()) 
group by year(convert(datetime,mem_loan.dos,105)) 
于 2012-04-18T13:48:06.760 に答える
0

このようなもの:

SELECT 
  SUM(noofshares),
  year(convert(datetime,mem_loan.dos,105)) 
FROM 
  shares s,mem_loan ml 
  JOIN mem_loan ON mem_loan.loan_acno=shares.loan_acno 
where year(convert(datetime,dos,105))=year(getdate())
GROUP BY year(convert(datetime,mem_loan.dos,105))

または、次のようにすることができます。

SELECT
    t.noofshares,
    SUM(t.LoanYear)
FROM
    (
        SELECT 
          noofshares,
          year(convert(datetime,mem_loan.dos,105)) as LoanYear
        FROM 
          shares s,mem_loan ml 
          JOIN mem_loan ON mem_loan.loan_acno=shares.loan_acno 

    ) AS t
where 
    t.LoanYear=year(getdate())
GROUP BY
    t.LoanYear
于 2012-04-18T13:48:27.477 に答える
0

必ず:

GROUP BY year(convert(datetime,dos,105))

集計SUM()が機能するため

于 2012-04-18T13:48:51.940 に答える
0

問題は、Sum関数を使用して集計しようとしていて、SQLサーバーがmem_loanテーブルから使用する年のレコードを認識していないことです。

手始めに、年の集計関数(つまり、MIN)を選択します。

SELECT 
    SUM(noofshares),
    MIN(year(convert(datetime,mem_loan.dos,105))) 
FROM
    shares s,
    mem_loan ml 
JOIN mem_loan ON mem_loan.loan_acno=shares.loan_acno 
WHERE 
    year(convert(datetime,dos,105))=year(getdate())
于 2012-04-18T13:52:39.477 に答える
0

集計の一部としてOVER列を含める必要があることを回避するために使用できます。dos免責事項:テストするための管理スタジオがありません。

   SELECT SUM(noofshares) OVER (PARTITION BY year(convert(datetime,mem_loan.dos,105)) ),year(convert(datetime,mem_loan.dos,105)) 
FROM shares s,mem_loan ml 
JOIN mem_loan ON mem_loan.loan_acno = shares.loan_acno 
WHERE year(convert(datetime,dos,105))=year(getdate())

詳細情報OVER: http: //msdn.microsoft.com/en-us/library/ms189461.aspx

于 2012-04-18T14:18:23.810 に答える