如何合并SQL中不常见的列
我应该写什么SELECT语句才能从表1和表2获得所需的表 表1-费用表 表2-订单表 所需表格如何合并SQL中不常见的列,sql,sql-server,union,union-all,Sql,Sql Server,Union,Union All,我应该写什么SELECT语句才能从表1和表2获得所需的表 表1-费用表 表2-订单表 所需表格 要使用UNION,每个SELECT必须具有相同数量的选定列、相同数量的列表达式、相同的数据类型,并且具有相同的顺序,如下所示: DECLARE @tblCharge AS Table ( ChargeId INT, BillingId INT, OrderId INT, ChargeName VARCHAR(50), Amount Decimal(18,2)
要使用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关于工会的文档: 如果要在表匹配的条件下组合两个表,请尝试使用内部联接:
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
最终结果与您想要的表不同,但比您试图返回的表更有逻辑意义。尝试下面的查询
;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
这应该是一个注释,如果我的回答对提问者有所帮助,那么它是否应该在注释部分就没有任何意义了。这是否意味着无法实现此所需的表?要实现上述结果,您还可以使用联接。为什么表2:OrderId=3不在列表中?