如何合并 SQL 中的不常见列

How to Union Uncommon Columns in SQL

我应该写什么 SELECT 语句才能从 Tabel1 和 2

中获得所需的 table

Table 1 - 充电 Table

Table 2 - 订单 Table

想要Table

要使用 UNION,每个 SELECT 必须具有相同数量的所选列、相同数量的列表达式、相同的数据类型,并且它们的顺序相同

使用联合如下:

DECLARE @tblCharge AS Table
(
    ChargeId INT,
    BillingId INT,
    OrderId INT,
    ChargeName VARCHAR(50),
    Amount Decimal(18,2)
)

DECLARE @tblOrder AS Table
(   
    OrderId INT,
    ProductName VARCHAR(50),
    Price Decimal(18,2)
)

INSERT INTO @tblCharge
(
    ChargeId,
    BillingId ,
    OrderId ,
    ChargeName ,
    Amount
)
VALUES
(1,1,1,'ServiceFee',2.00),
(2,1,2,'ServiceFee',3.00),
(3,1,3,'ServiceFee',2.00),
(4,1,3,'BookingFee',2.00),
(5,2,4,'ServiceFee',1.00),
(6,2,5,'ServiceFee',1.00)

INSERT INTO @tblOrder
(
    OrderId ,
    ProductName ,
    Price
)
VALUES
(1,'Sandwich',5.00),
(2,'Coke',2.50),
(3,'Cake',5.00),
(4,'Water',3.00),
(5,'Sandwich',7.00)

SELECT
    ChargeId,
    BillingId ,
    OrderId ,
    ChargeName ,
    Amount
FROM @tblCharge C
UNION
SELECT
    C.ChargeId,
    C.BillingId ,
    O.OrderId ,
    O.ProductName ,
    O.Price
FROM @tblOrder O 
LEFT JOIN @tblCharge C ON C.OrderId=O.OrderId

你在这里做的事情没有太大意义..

首先,联合不能以您尝试应用它的方式使用。在此处查看 Microsoft 关于联合的文档:

https://msdn.microsoft.com/en-us/library/ms180026.aspx

如果您想在 table 匹配的条件下合并两个 table,请尝试使用 INNER JOIN:

SELECT a.ChargeId, a.BillingId, a.OrderId a.ChargeName, a.Amount, b.ProductName, b.Price
FROM Table1 a
INNER JOIN Table2 b ON a.OrderId = b.OrderId

最终结果与您想要的 table 不同,但比您尝试 return 更符合逻辑。

尝试使用以下查询..

;WITH cte_1
 as
 (SELECT ChargeID,BillingId,o.OrderID,ChargeName,ProductName,Amount,Price
 FROM Charge c
   JOIN [Order] o on c.OrderID=o.OrderID)
SELECT ChargeID,BillingId,OrderID,ChargeName,Amount
FROM cte_1
UNION 
SELECT ChargeID,BillingId,OrderID,ProductName,Price
FROM cte_1
ORDER BY OrderID