0

レポートを作成し、'NUMBER' 列のすべての NULL 値を、別の 'VALUE' 列の値に応じて 1 から 10 の間の値に置き換えてから合計する必要があります。「NUMBER」の一部はすでに含まれていますが、含まれていないものもあります。基本的に、これは私が持っているものです -

**NUMBER**   **VALUE**    **DATE**
NULL         Apple        2012-08-01
NULL         Pear         2012-08-01
NULL         Banana       
NULL         Apple        2012-08-02
1            Apple        
2            Pear         2012-08-04
3            Banana       2012-08-04

私が作成する必要があるのは、このようなものを示すレポートです -

**NUMBER**    **VALUE**    **TOTAL**    **DATE**
1             Apple        3            2
2             Pear         2            2
3             Banana       2            1

私が抱えている問題は、SQL 内に別の COUNT があり、すべてを連携させる方法が見つからないことです。現在のSQLは次のようになります -

SELECT    NUMBER,
          VALUE,
          COUNT (NUMBER) AS TOTAL,
          COUNT (DATE) AS DATE

FROM      MY_TABLE

GROUP BY  NUMBER,
          VALUE

ありがとう。

4

1 に答える 1

1

私があなたの質問を正しく理解していれば、このクエリはあなたが望む合計を返します:

WITH ValueCount AS
(
   SELECT mt.Value, COUNT(1) AS Total
   FROM #My_Table AS mt
   GROUP BY mt.Value
)
, DateCount AS
(
   SELECT mt.Value, COUNT(1) AS DateTotal
   FROM #My_Table AS mt
   WHERE mt.MyDate IS NOT NULL
   GROUP BY mt.Value
)
SELECT mt.Number, vc.Value, vc.Total, dc.DateTotal
FROM ValueCount AS vc
INNER JOIN #My_Table AS mt ON vc.Value = mt.Value
INNER JOIN DateCount AS dc ON vc.Value = dc.Value
WHERE mt.Number IS NOT NULL
ORDER BY mt.Number ASC;

別の基準を探していたので、日付からの値の合計を分割しました。Common Table Expression (CTE)の外観が気に入らない場合は、複数のクエリまたはサブクエリを使用してこれを実現できます。

CTE を使用する場合、前のクエリはセミコロンで終了する必要があります。

于 2012-08-23T15:51:29.300 に答える