0

私は2つのテーブルの下にあります

表1

 Plant      
 -----
 TRP1
 DEP1

表2

Config
------
84ROC20
100ROC20

および2つのテキストボックス

1.開始日(日時):2012-08-01 00:00:00.000

2.Enddate(datetime):2012-10-01 00:00:00.000

結果として3列のテーブルを下に置きたい

Plant  Config    Time
-----  ------   -------
TRP1   84ROC20   2012-08-01 00:00:00.000 
TRP1   84ROC20   2012-09-01 00:00:00.000 
TRP1   84ROC20   2012-10-01 00:00:00.000
DEP1   84ROC20   2012-08-01 00:00:00.000 
DEP1   84ROC20   2012-09-01 00:00:00.000
DEP1   84ROC20   2012-10-01 00:00:00.000
TRP1   100ROC20  2012-08-01 00:00:00.000
TRP1   100ROC20  2012-09-01 00:00:00.000 
TRP1   100ROC20  2012-10-01 00:00:00.000
DEP1   100ROC20  2012-08-01 00:00:00.000 
DEP1   100ROC20  2012-09-01 00:00:00.000
DEP1   100ROC20  2012-10-01 00:00:00.000

このテーブルを手伝ってくれませんか

4

1 に答える 1

0

SQL Server 2005+(便宜上再帰CTEを使用)を想定していますが、これは次のことに役立ちます。

-- Get user data
declare @StartDate datetime = '2012-08-01'
declare @EndDate datetime = '2012-10-01'

-- Actual query
;with Dates as ( -- Build a date table based upon the user values
    select @StartDate as DateEntry -- Start at StartDate
    union all
    select dateadd(m, 1, DateEntry) -- Recursively add a month
    from Dates
    where dateadd(m, 1, DateEntry) <= @EndDate -- Until the EndDate is reached
)
select *
from Plant, Config, Dates -- Cross-join all tables to get all possibilities
order by Config desc, Plant desc, DateEntry

これにより、テストデータの以下の出力が得られます。

Plant      Config     DateEntry
---------- ---------- -----------------------
TRP1       84ROC20    2012-08-01 00:00:00.000
TRP1       84ROC20    2012-09-01 00:00:00.000
TRP1       84ROC20    2012-10-01 00:00:00.000
DEP1       84ROC20    2012-08-01 00:00:00.000
DEP1       84ROC20    2012-09-01 00:00:00.000
DEP1       84ROC20    2012-10-01 00:00:00.000
TRP1       100ROC20   2012-08-01 00:00:00.000
TRP1       100ROC20   2012-09-01 00:00:00.000
TRP1       100ROC20   2012-10-01 00:00:00.000
DEP1       100ROC20   2012-08-01 00:00:00.000
DEP1       100ROC20   2012-09-01 00:00:00.000
DEP1       100ROC20   2012-10-01 00:00:00.000

基本的に、ここでの秘訣は、Datesテーブルをその場で作成し、それをPlantおよびConfigと相互結合することです。集計テーブル、カーソル、whileループ、asp.net自体など、他のさまざまな方法でDatesテーブルを作成できます。ここでは再帰CTEの使いやすさが気に入っていますが、少数の日付を生成する必要があります。パフォーマンスに問題がある場合に別の方法を完全に選択しない場合、100を超える日付では、maxrecursionを設定する必要があります。

于 2012-10-17T19:52:04.717 に答える