Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Truy vấn Sql để tham gia / kết hợp hai bảng

Điều này đã được thử nghiệm trong SQL Server 2008 R2. Tôi tin rằng mọi thứ ở đây sẽ hoạt động tốt trong năm 2005. Năm 2005, theo như tôi nhớ, đã giới thiệu PIVOT và OVER cùng những thứ khác. Nếu bạn thấy bất kỳ vấn đề nào, hãy cho tôi biết.

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. Đọc tài liệu XML được lưu trữ trong SQL Server 2008 R2 với kiểu dữ liệu XML

  2. Không thể chạy gói SSIS của tôi

  3. Chuyển đổi sang định dạng mm / dd / yyyy

  4. Cách thêm cột nhận dạng vào bảng bằng TSQL và GUI trong SQL Server - Hướng dẫn SQL Server / T-SQL Phần 40

  5. Tại sao tôi nên nâng cấp từ SQL2000 lên SQL2005?