如何在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时使用
大小写,则选择订单总额,然后使用子查询。谢谢,这就是我想要的!谢谢,这就是我想要的!