2

これが私が持っている現在のテーブルの例です:

1) テーブル名: TotalSales

Name    Year  Month  Sales
------  ----  -----  -----
Alfred  2011  1      100

私がやりたいことは、このようなテーブルを作成し、新しい行を追加することです(前月の売上):

2) テーブル名: TotalSales

Name    Year  Month  Sales  Prior month sales
------  ----  -----  -----  -----------------
Alfred  2011  2      110    100

方法はわかりませんが、これは私が取り組んできたことです:

SELECT Name, Year, Month, Sales, Sales as [Prior Month sales]
FROM TotalSales
WHERE
DATEPART(month, [Prior Month sales]) = DATEPART(month, DATEADD(month, -1, getdate()))

助けてくれてありがとう

4

3 に答える 3

2

これでうまくいくと思います...名前/前月に参加する必要がありますが、年/月は別々に保存されているため、前月のテストケースが2つあります。

select c.Name, c.Year, c.Month, c.Sales, p.Sales
from TotalSales c
left join TotalSales p
on c.Name = p.Name and (
    (c.Month > 1 and c.Year = p.Year and c.Month = p.Month + 1)
    or (c.Month = 1 and c.Year = p.Year + 1 and p.Month = 12))
于 2011-07-29T14:03:04.493 に答える
1

特定のデータを選択するには、テーブルをそれ自体に結合する必要があります。

SELECT
    TS.name,
    TS.year,
    TS.month,
    TS.sales,
    COALESCE(TS2.sales, 0) AS prior_month_sales
FROM
    TotalSales TS
LEFT OUTER JOIN TotalSales TS2 ON
    TS2.name = TS.name AND
    (
        (TS2.year = TS.year AND TS2.month = TS.month - 1) OR
        (TS.month = 1 AND TS2.month = 12 AND TS2.year = TS.year - 1)
    )

これLEFT OUTER JOINは、前月 (または今月がその会社での最初の月) に売上がなかった場合の外部結合です。

于 2011-07-29T14:03:08.947 に答える
0

このようなことを試して、必要な値でテーブルを更新してください...

UPDATE TotalSales
SET PriorMonthSales = 
(
    SELECT TS.Sales
    FROM TotalSales TS
    WHERE 
    (TotalSales.Month = TS.Month + 1 AND TotalSales.Year = TS.Year)
    OR 
    (TotalSales.Month = 1 AND TS.Month = 12 AND TS.Year = TotalSales.Year -1)
)
于 2011-07-29T14:05:20.887 に答える