如何合并 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
我应该写什么 SELECT 语句才能从 Tabel1 和 2
中获得所需的 tableTable 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