0

私は、在庫のあるアイテムの数量、数量、および残高数量を表示することになっている2つのテーブルを持っています。次のようにクエリを書きました。

SELECT I.Date as Date, 
P.ResourceName as ItemName,
P.ResourceRate as Rate,
i.TotalInQty as InwardsQuantity,
s.TotalOutQty as OutwardsQuantity,
i.TotalInQty-S.TotalOutQty as Balance,
O.UnitSymbol As ItemUnit
FROM UnitMaster O
INNER JOIN Resource_Master P
 ON O.UnitCode = P.Unitcode
LEFT JOIN
(
  select sum(i.Qty) TotalInQty, Nameofitem
  from Inwards_Master I
  group by Nameofitem
) I
ON I.Nameofitem= P.ResourceName
LEFT JOIN
(
  select sum(s.qty) TotalOutQty, Nameofitem
  from Outwards_Master S 
  group by s.Nameofitem
) S
ON I.Date=S.Date 
AND I.Nameofitem =S.Nameofitem
WHERE P.TenderCode=1

上記のクエリでは、次のようなエラーが表示されます。

メッセージ 8120、レベル 16、状態 1、行 14 列 'Inwards_Master.Date' は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。

1 私を助けてください

4

2 に答える 2

1

それはまさにそのとおりです-したがって、集計にI.Dateandを含めてみてください:S.Date

SELECT I.Date as Date, 
P.ResourceName as ItemName,
P.ResourceRate as Rate,
i.TotalInQty as InwardsQuantity,
s.TotalOutQty as OutwardsQuantity,
i.TotalInQty-S.TotalOutQty as Balance,
O.UnitSymbol As ItemUnit
FROM UnitMaster O
INNER JOIN Resource_Master P
 ON O.UnitCode = P.Unitcode
LEFT JOIN
(
  select COALESCE(sum(i.Qty), 0) AS TotalInQty, Nameofitem, Min(I.Date) AS Date
  from Inwards_Master I
  group by Nameofitem
) I
ON I.Nameofitem= P.ResourceName
LEFT JOIN
(
  select COALESCE(sum(s.qty), 0) AS TotalOutQty, Nameofitem, Min(S.Date) AS Date
  from Outwards_Master S 
  group by s.Nameofitem
) S
ON I.Date=S.Date 
AND I.Nameofitem =S.Nameofitem
WHERE P.TenderCode=1
于 2013-01-10T08:58:10.053 に答える
1

Dateこれは、テーブル参照inotから列を選択していないため、集計関数またはsを使用して選択リストに含めるか、次のように句に含める必要があります。MINMAXGROUP BY

SELECT 
  I.Date as Date, 
  P.ResourceName as ItemName,
  P.ResourceRate as Rate,
  i.TotalInQty as InwardsQuantity,
  s.TotalOutQty as OutwardsQuantity,
  i.TotalInQty - S.TotalOutQty as Balance,
  O.UnitSymbol As ItemUnit
FROM UnitMaster O
INNER JOIN Resource_Master P ON O.UnitCode = P.Unitcode
LEFT JOIN
(
  select 
    sum(i.Qty) TotalInQty, 
    "Date",
    Nameofitem
  from Inwards_Master I
  group by Nameofitem, "Date"
) I
ON I.Nameofitem = P.ResourceName
LEFT JOIN
(
  select 
    sum(s.qty) TotalOutQty, 
    "Date",
    Nameofitem
  from Outwards_Master S 
  group by s.Nameofitem, "Date"
) S  ON I.Date       = S.Date 
    AND I.Nameofitem = S.Nameofitem
WHERE P.TenderCode = 1;

または:日付を記入する必要がなかった場合GROUP BY、グループ化されたそれぞれの日付を取得しますNameofitemか?

この場合、集計関数を使用する必要があります。たとえばMAX(Date)、次のように最新の日付を取得するには:

...
LEFT JOIN
(
  select 
    sum(i.Qty) TotalInQty, 
    MAX("Date") LatestDate,
    Nameofitem
  from Inwards_Master I
  group by Nameofitem
) I

についても同じですs

于 2013-01-10T08:56:16.157 に答える