[英]Sql query to join/union two tables
我正在尋找一些建議,以建立一個查詢來聯接表A和表B,以將輸出作為表C。看起來我需要能夠將兩個表結合起來並建立一個交叉表查詢。 下面顯示的數據僅是示例,因為兩個表中的日期每月都會更改。 注意:兩個表格中的日期不會重疊。 例如,在表B下面將永遠不會有FutureDate作為六月或七月。 反之亦然
Table A
Product Location HistoryDate HistorySales ... more columns
A X June 100
A X July 200
Table B
Product Location FutureDate FutureSales ... more columns
A X August 150
A X Sept 50
Table C
Product Location June July August September ... other columns from A & B
A X 100 200 150 50
謝謝你的幫助。
這已在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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.