0

私はSQLを初めて使用しますが、すぐに理解できます。検索しましたが、意味のあるものが見つかりませんでした。私が言ったように、私は新しいです、ごめんなさい。適切な場合は、SQL Server2008R2を使用します。

このように構成されたテーブルが1つあります

AccountNumber  StartDate                EndDate
  123456       2012-05-07 12:55:55.000  2012-05-09 09:53:55.000
  789012       2012-10-17 13:55:55.000  2012-11-02 10:53:55.000
  345678       2012-11-13 14:55:55.000  2012-12-14 11:53:55.000

このように構成された就業日テーブルもあります

Date        IsWorkday  DayOfWeek
2012-01-01     N          1
2012-01-02     N          2
2012-01-03     Y          3
2012-01-04     Y          4
2012-01-05     Y          5
2012-01-06     Y          6

Etc. through 2020-12-31

私はテーブルを設定しなかったので、それらを変更することはできません。やってみました、許されません。dbadminに直接メールを送信することもできません。きちんとした。

処理できる特定の列を選択する必要がありますが、最後に1つの列が必要です。これは、StartDate値とEndDate値の間の日数のカウントになりますが、その間の日数がworkdaysテーブルにある場合に限ります。 IsWorkdayのYの値。それが理にかなっていることを願っています。現在の構造でそれを行うことが単純に不可能であるか、非常に面倒な場合は、それも知っておくとよいでしょう(したがって、より良い就業日/非就業日テーブルなどをプッシュできます)。どんな助けでも大いに感謝され、おそらく私の長子と交換されるかもしれません。

4

1 に答える 1

0

これを試して

SELECT X.*, X2.DayCnt 
FROM AccountTable X
INNER JOIN 
(
    SELECT a.accountnumber,a.StartDate, b.EndDate, Count(b.Date) DayCnt 
    FROM AccountTable a
    LEFT OUTER JOIN workdays w 
        ON a.StartDate >= w.date and 
        a.EndDate <= w.date and 
        IsWorkday = 'Y'
    GROUP BY a.accountnumber,a.StartDate, b.EndDate
) X2 
ON X.accountnumber = X2.accountnumber and
X.StartDate = X2.StartDate and X.EndDate = X2.EndDate
于 2013-01-18T17:29:28.223 に答える