如何在SQL中创建此输出
我有这个消息 表订单总数如何在SQL中创建此输出,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有这个消息 表订单总数 Order Value A 10 B 20 C 15 表Orderdetails Order Line Description A 11 Red B 24 Blue B 25 Green B 28 Yellow C 17 Green 我想要这个输出 Order Line Description Value A 11 Red
Order Value
A 10
B 20
C 15
表Orderdetails
Order Line Description
A 11 Red
B 24 Blue
B 25 Green
B 28 Yellow
C 17 Green
我想要这个输出
Order Line Description Value
A 11 Red 10
B 24 Blue 20
B 25 Green
B 28 Yellow
C 17 Green 15
这可能吗?如果是,怎么做?尝试下面的查询
select
od.Order,
od.Line ,
od.Description,
ot.Value
from
OrderTotals OT
join Orderdetails OD on OT.order=od.order
如果您有任何疑问,请告知我们请尝试下面的查询
select
od.Order,
od.Line ,
od.Description,
ot.Value
from
OrderTotals OT
join Orderdetails OD on OT.order=od.order
如果您有任何疑问,请告诉我们您似乎想要一个
左加入
:
select od.*,
(case when row_number() over (partition by od.[order] order by line) = 1
then ot.value
end) as value
from orderdetails od left join
ordertotals ot
on od.[order] = ot.[order]
order by od.[order], od.line;
我不确定您为什么只想在一行上使用
值,但这应该可以实现该目标。您似乎想要一个左连接
:
select od.*,
(case when row_number() over (partition by od.[order] order by line) = 1
then ot.value
end) as value
from orderdetails od left join
ordertotals ot
on od.[order] = ot.[order]
order by od.[order], od.line;
我不确定您为什么只想在一行上显示值,但这应该可以实现该目标。您可以如下所示:
SELECT
*
FROM
Orderdetails X LEFT JOIN
(
SELECT
*
FROM
OrderTotals A INNER JOIN
(SELECT OD.Order, MIN(OD.Line) MinLine FROM Orderdetails OD GROUP BY OD.Order) B ON A.Order = B.Order
) Y ON X.Order = Y.Order AND X.Line = Y.MinLine
您可以按以下方式进行操作:
SELECT
*
FROM
Orderdetails X LEFT JOIN
(
SELECT
*
FROM
OrderTotals A INNER JOIN
(SELECT OD.Order, MIN(OD.Line) MinLine FROM Orderdetails OD GROUP BY OD.Order) B ON A.Order = B.Order
) Y ON X.Order = Y.Order AND X.Line = Y.MinLine
试试这个
SELECT A.[Order],
CASE
WHEN Row_number()
OVER(
PARTITION BY A.[ORDER]
ORDER BY A.[ORDER]) = 1 THEN VALUE
ELSE NULL
END AS VALUE,
B.[Line Description]
FROM TABLE1 A
LEFT JOIN Table2 B
ON A.[Order] = B.[Order]
试试这个
SELECT A.[Order],
CASE
WHEN Row_number()
OVER(
PARTITION BY A.[ORDER]
ORDER BY A.[ORDER]) = 1 THEN VALUE
ELSE NULL
END AS VALUE,
B.[Line Description]
FROM TABLE1 A
LEFT JOIN Table2 B
ON A.[Order] = B.[Order]
这听起来像是一个您应该尝试在SQL Server之外解决的问题。您希望使用订单总额描绘订单行详细信息,但仅针对所述详细信息的第一条记录。除了非常奇怪的设计,对我来说没有什么意义。要回答你的问题,这当然是可能的。如果您在行中使用行号()
排序,并在为1时使用大小写,则选择订单总数,然后使用一个子查询。这听起来像是一个您应该尝试在SQL Server外部解决的问题。您希望使用订单总额描绘订单行详细信息,但仅针对所述详细信息的第一条记录。除了非常奇怪的设计,对我来说没有什么意义。要回答你的问题,这当然是可能的。如果您在行中使用行编号()
排序,并在为1时使用大小写,则选择订单总额,然后使用子查询。谢谢,这就是我想要的!谢谢,这就是我想要的!