2

通常、これは逆に機能しますが、SQLを使用して単一のレコードを複数のレコードに分割したいと思います。

開始日と終了日の範囲を格納しますが、範囲内の各年のレコードをエクスポートする必要があります。

例:2009年と2011年のをTECH_ID持っています。2009年、2010年、2011年の3つのレコードをエクスポートする必要があります。begin_dateend_date

これはどのように達成できますか?

4

3 に答える 3

1

あなたは数字の表が必要です

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
于 2012-11-06T22:23:00.903 に答える
1

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
于 2012-11-06T22:24:39.863 に答える
1

私があなたの質問を読んだとき、それはサンプルデータについて明確に言及されていませんでした。ちなみに、私はこれを例として、あなたが持っているものに基づいて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

乾杯

于 2012-11-06T22:25:24.327 に答える