0

ID、日付、カテゴリ、値の 4 つの列を持つ単純なテーブルがあります。

毎日特定の値を持つ 5 つの異なるカテゴリがあります。さまざまな時点で値列を選択し、適切なカテゴリとともに結果を表示したいと思います。

これは私が使用しているコードです:

select
Category,
case when date=DATE_SUB(CURDATE(),INTERVAL 1 DAY) then value else 0 end as Today,
case when date=DATE_SUB(CURDATE(),INTERVAL 1 MONTH) then value else 0 end as "Month Ago",
case when date=DATE_SUB(CURDATE(),INTERVAL 1 Year) then value else 0 end as "Year Ago"
from table
group by category

動いていない。私は mysql データベースを使用していますが、ODBC 接続を介して SSRS でクエリを実行します。

4

3 に答える 3

0

このようなことを試してください:

SELECT
    t1.Category, t1.Value, t2.Value, t3.Value
    FROM YourTable t1
    LEFT OUTER JOIN YourTable t2 ON t1.Category=t2.Category 
                                    AND Date=DATE_SUB(CURDATE(),INTERVAL 1 Month)
    LEFT OUTER JOIN YourTable t3 ON t1.Category=t3.Category 
                                    AND Date=DATE_SUB(CURDATE(),INTERVAL 1 Year)
    WHERE Date=DATE_SUB(CURDATE(),INTERVAL 1 DAY)

これは、間隔ごとに 1 つの行しかないことを前提としています。間隔ごとに複数の行がある場合は、その間隔で表示する値 (最小、最大など) を決定する必要があります。次に、複数の行を集約する必要があります。この場合、OPはいくつかのサンプルデータと予想されるクエリ出力を提供する必要があるため、テストが可能になります。

于 2012-06-01T17:58:35.200 に答える
0

このタイプのクエリは、次の 3 つの個別のクエリで行うのが最適です。

SELECT 'Today' AS `When`, Category, value FROM `table`
  WHERE date = DATE_SUB(CURDATE(),INTERVAL 1 DAY)
UNION ALL
SELECT 'Month Ago' AS `When`, Category, value FROM `table`
  WHERE date = DATE_SUB(CURDATE(),INTERVAL 1 MONTH)
UNION ALL
SELECT 'Year Ago' AS `When`, Category, value FROM `table`
  WHERE date = DATE_SUB(CURDATE(),INTERVAL 1 YEAR)
于 2012-06-01T17:46:53.537 に答える
0

クエリの問題は、書かれているように、case ステートメントを集計関数に埋め込む必要があることです。

select Category,
       avg(case when date=DATE_SUB(CURDATE(),INTERVAL 1 DAY) then value end) as Today,
       avg(case when date=DATE_SUB(CURDATE(),INTERVAL 1 MONTH) then value end) as "Month Ago",
       avg(case when date=DATE_SUB(CURDATE(),INTERVAL 1 Year) then value end) as "Year Ago"
from table
group by category

複数の値があり、「値」列が数値である場合、これは妥当と思われるため、「avg」を選択しました。他の値を取得するには、min() または max() を使用することをお勧めします。

また、「else 0」句を削除したため、値がない場合は 0 ではなく NULL が表示されます。

于 2012-06-01T17:47:21.903 に答える