通常、これは逆に機能しますが、SQLを使用して単一のレコードを複数のレコードに分割したいと思います。
開始日と終了日の範囲を格納しますが、範囲内の各年のレコードをエクスポートする必要があります。
例:2009年と2011年のをTECH_ID
持っています。2009年、2010年、2011年の3つのレコードをエクスポートする必要があります。begin_date
end_date
これはどのように達成できますか?
通常、これは逆に機能しますが、SQLを使用して単一のレコードを複数のレコードに分割したいと思います。
開始日と終了日の範囲を格納しますが、範囲内の各年のレコードをエクスポートする必要があります。
例:2009年と2011年のをTECH_ID
持っています。2009年、2010年、2011年の3つのレコードをエクスポートする必要があります。begin_date
end_date
これはどのように達成できますか?
CREATE TABLE Numbers
(
Number INT NOT NULL,
CONSTRAINT PK_Numbers
PRIMARY KEY CLUSTERED (Number)
WITH FILLFACTOR = 100
)
INSERT INTO Numbers
SELECT
(a.Number * 256) + b.Number AS Number
FROM
(
SELECT number
FROM master..spt_values
WHERE
type = 'P'
AND number <= 255
) a (Number),
(
SELECT number
FROM master..spt_values
WHERE
type = 'P'
AND number <= 255
) b (Number)
GO
これで数値テーブルができました...
SELECT DISTINCT
n.Number
FROM
Numbers n
JOIN TECH_ID t
ON n.Number BETWEEN t.begin_date AND t.end_date
1年に1行のテーブルを作成します(一部のRDBMSにはショートカットがあります)。その後、
Select
t.*,
y.Year
From
Years y
Inner Join
tech_id t
On Year(t.begin_date) <= y.Year And Year(t.end_date) >= y.Year
私があなたの質問を読んだとき、それはサンプルデータについて明確に言及されていませんでした。ちなみに、私はこれを例として、あなたが持っているものに基づいて1つのレコードを3つのレコードに配置するために書きました。
Select *
From (
Select 1 As Id
, 'Test' As Name
) As SampleRecord
Cross Join
(
Select 2009 As Year
Union Select 2010
Union Select 2011
) As Years
乾杯