sql >> データベース >  >> RDS >> Sqlserver

2つのテーブルを結合/結合するためのSQLクエリ

    これは、SQL Server 2008 R2 でテストされています。 2005 年も同様に機能すると思います。私が覚えている限りでは、2005 年に PIVOT と OVER が導入されました。何か問題を見つけたら、私に知らせてください。

    DECLARE @Products TABLE
    (
        ID INT IDENTITY(1, 1)
        , Name VARCHAR(30)
    );
    
    INSERT INTO @Products
    VALUES ('Dummies Guide to Querying'), ('SQL Design Patterns');
    
    DECLARE @OldProducts TABLE
    (
        ID INT IDENTITY(1, 1)
        , ProductID INT
        , Location CHAR(2)
        , HistoryDate DATE
        , Sales INT
    );
    
    INSERT INTO @OldProducts
    VALUES (1, 'CO', '20100601', 100)
        , (1, 'CO', '20100701', 200)
        , (1, 'CA', '20100526', 150)
        , (2, 'CA', '20100601', 175);
    
    DECLARE @NewProducts TABLE
    (
        ID INT IDENTITY(1, 1)
        , ProductID INT
        , Location CHAR(2)
        , FutureDate DATE
        , PredictedSales INT
    );
    
    INSERT INTO @NewProducts
    VALUES (1, 'CO', '20110401', 200)
        , (1, 'CO', '20110601', 250)
        , (1, 'CA', '20110401', 150)
        , (2, 'CA', '20110301', 180)
        , (3, 'WA', '20110301', 100);
    
    WITH AllProduts AS
    (
        SELECT
            Products.Name
            , OldProducts.Location
            , DATENAME(MONTH, OldProducts.HistoryDate) AS MonthValue
            , OldProducts.Sales
        FROM @OldProducts AS OldProducts
        INNER JOIN @Products AS Products
            ON Products.ID = OldProducts.ProductID
    
        UNION ALL
    
        SELECT
            Products.Name
            , NewProducts.Location
            , DATENAME(MONTH, NewProducts.FutureDate) AS MonthValue
            , NewProducts.PredictedSales AS Sales
        FROM @NewProducts AS NewProducts
        INNER JOIN @Products AS Products
            ON Products.ID = NewProducts.ProductID
    )
    SELECT
        Name
        , Location
        , [January]
        , [Febuary]
        , [March]
        , [April]
        , [May]
        , [June]
        , [July]
        , [August]
        , [September]
        , [October]
        , [November]
        , [December]
    FROM AllProduts
    PIVOT
    (
        SUM(Sales)
        FOR MonthValue
        IN
        (
            [January]
            , [Febuary]
            , [March]
            , [April]
            , [May]
            , [June]
            , [July]
            , [August]
            , [September]
            , [October]
            , [November]
            , [December]
        )
    ) PivotedTable
    ORDER BY Name, Location;
    



    1. mysqlは一意のキーを組み合わせました

    2. 単純なWebドキュメントシステム(または基本的なCMS)でRDBMSとフラットファイルを使用することの本当の利点はありますか?

    3. 2つのテーブルで結果を取得するにはどうすればよいですか

    4. Postgresで日付形式を変更するにはどうすればよいですか?