Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Проблем с производителността на съхранената процедура на SQL Server 2005

  2. Как да промените настройките за конфигурация за поща на база данни в SQL Server (T-SQL)

  3. Тегло на Хеминг/преброяване на населението в T-SQL

  4. Открийте извикващата съхранена процедура в SQL Server

  5. Извличане на атрибути от XML полета в таблица на SQL Server 2008