0

Microsoft SQL Server の別のテーブルから選択された他の 2 つの日付の間にある日付を見つけなければなりません

つまり、次のようなことをしたい

     Select A.* from  ( select member.key, 
           case when effective_date between (select month_start and month_end 
           from sales_month 
           where month=2 and year=2013) bucket_1
           then 1 else 0 from member ) as A
          where a.bucket_1 != 0

別の月のケースステートメントを複製する必要があります。アイデア/助けはありますか?

ありがとう

シャンカール。

4

4 に答える 4

5

これは、JOIN を使用して実行できます。

SELECT m.* 
FROM member m
JOIN sales_month sm
    ON sm.month = 2
    AND sm.year = 2013
    AND m.effective_date BETWEEN sm.month_start AND sm.month_end;
于 2013-04-17T21:38:45.773 に答える
4

変数を使用して情報を保持します。

DECLARE @StartDate DATETIME,
        @EndDate DATETIME
SELECT @StartDate = month_start
       , @EndDate = month_end
FROM sales_month
WHERE [month] = 2 AND [year] = 2013

SELECT *
from member
where effective_date BETWEEN @StartDate AND @EndDate
于 2013-04-17T21:38:16.120 に答える
0

テーブルから月と年を取得する必要がある理由がわかりません。発効日が 2013 年 2 月であるすべてのメンバーを探していますよね? ここであなたのために何をsales_monthしていますか?

DECLARE @m INT, @y INT;
SELECT @m = 2, @y = 2013;


DECLARE @d DATETIME;
SET @d = DATEADD(MONTH, @m-1, DATEADD(YEAR, @y-1900, 0));

SELECT m.*            -- don't use SELECT *!
 FROM dbo.member AS m -- always use schema prefix!
  WHERE effective_date >= @d 
  AND effective_date < DATEADD(MONTH, 1, @d); -- don't use BETWEEN!

テーブルから取得する必要がある場合 (たとえば、販売月が何らかの理由で暦月と同じでない場合)、結合を使用しますが、BETWEENロジックが実際に何を意味するのかわかりません。論理的な場合に備えて残しますが、ほとんどの場合、そうではありません。

SELECT m.*
 FROM dbo.member AS m
 INNER JOIN dbo.sales_month AS s
 ON m.effective_date BETWEEN s.month_start AND s.month_end
 WHERE s.[month] = 2 AND s.[year] = 2013; -- don't use reserved words as column names!

関連リンク:

于 2013-04-17T21:43:58.930 に答える