Sql 另一个不会,因为语法似乎如此。必须包含计划。如果订单没有行项目,则此操作无效。然后,子表达式计算LineItems.LineItemID=null并从结果中完全删除左侧实体顺序。这也是内部联接的效果,因此。。。是的。可以适用于左外连接的解决方案:@leo是

Sql 另一个不会,因为语法似乎如此。必须包含计划。如果订单没有行项目,则此操作无效。然后,子表达式计算LineItems.LineItemID=null并从结果中完全删除左侧实体顺序。这也是内部联接的效果,因此。。。是的。可以适用于左外连接的解决方案:@leo是,sql,sql-server,tsql,sql-server-2000,Sql,Sql Server,Tsql,Sql Server 2000,另一个不会,因为语法似乎如此。必须包含计划。如果订单没有行项目,则此操作无效。然后,子表达式计算LineItems.LineItemID=null并从结果中完全删除左侧实体顺序。这也是内部联接的效果,因此。。。是的。可以适用于左外连接的解决方案:@leo是的,但是OP自己使用了一个内部连接,所以我不理解你的反对意见。但是两列上分别有max意味着数量可能与描述无关。如果顺序是2个小部件和10个小部件,那么查询将返回10个小部件。您不能使用分组依据吗?我认为(如果我错了,请纠正我)分组依据将需要列出


另一个不会,因为语法似乎如此。必须包含计划。如果订单没有行项目,则此操作无效。然后,子表达式计算
LineItems.LineItemID=null
并从结果中完全删除左侧实体顺序。这也是内部联接的效果,因此。。。是的。可以适用于左外连接的解决方案:@leo是的,但是OP自己使用了一个内部连接,所以我不理解你的反对意见。但是两列上分别有max意味着数量可能与描述无关。如果顺序是2个小部件和10个小部件,那么查询将返回10个小部件。您不能使用
分组依据
吗?我认为(如果我错了,请纠正我)
分组依据
将需要列出所有其他列,不包括您不希望重复的列。这是我发现的唯一一个真正的“左”连接的答案,这意味着它不会在“左”表中添加更多的行。您只需要在子查询中添加“whererownumnotnull”,这是最好的解决方案。此解决方案也不要求您在要加入的表中具有唯一的ID,并且比投票最多的答案快得多。通过在子查询中使用ORDER by子句,您还可以为希望返回的行添加条件,而不仅仅是随机获取一行。这是一个很好的解决方案。请注意:在您自己的情况下使用时,请非常小心如何使用Partition BY(通常您确实需要一些ID列)和ORDER BY(大多数情况下都可以使用ORDER BY,具体取决于您要保留的行,例如DateCreated desc是某些表的一种选择,但这取决于很多事情)最好的回答,如果你问我。我认为这是最好的答案。请考虑解释你的查询如何解决OP的问题。我认为这个答案是一个重复的答案。<代码>连接< /COD>和<代码>应用< /C> >不一样。
SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
    INNER JOIN LineItems 
    ON Orders.OrderID = LineItems.OrderID
SELECT   Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM     Orders
JOIN     LineItems
ON       LineItems.LineItemGUID =
         (
         SELECT  TOP 1 LineItemGUID 
         FROM    LineItems
         WHERE   OrderID = Orders.OrderID
         )
SELECT  Orders.OrderNumber, LineItems2.Quantity, LineItems2.Description
FROM    Orders
CROSS APPLY
        (
        SELECT  TOP 1 LineItems.Quantity, LineItems.Description
        FROM    LineItems
        WHERE   LineItems.OrderID = Orders.OrderID
        ) LineItems2
SELECT 
  Orders.OrderNumber, 
  LineItems.Quantity, 
  LineItems.Description
FROM 
  Orders INNER JOIN LineItems 
  ON Orders.OrderID = LineItems.OrderID
WHERE
  LineItems.LineItemID = (
    SELECT MIN(LineItemID) 
    FROM   LineItems
    WHERE  OrderID = Orders.OrderID
  )
SELECT 
  Orders.OrderNumber
, LineItems.Quantity
, LineItems.Description
FROM (  
  SELECT 
    Orders.OrderID
  , Orders.OrderNumber
  , FirstLineItemID = (
      SELECT TOP 1 LineItemID
      FROM LineItems
      WHERE LineItems.OrderID = Orders.OrderID
      ORDER BY LineItemID -- or whatever else
      )
  FROM Orders
  ) Orders
JOIN LineItems 
  ON LineItems.OrderID = Orders.OrderID 
 AND LineItems.LineItemID = Orders.FirstLineItemID
SELECT 
  Orders.OrderNumber,
  LineItems.Quantity, 
  LineItems.Description
FROM 
  Orders
  INNER JOIN (
    SELECT
      Orders.OrderNumber,
      Max(LineItem.LineItemID) AS LineItemID
    FROM
      Orders INNER JOIN LineItems
      ON Orders.OrderNumber = LineItems.OrderNumber
    GROUP BY Orders.OrderNumber
  ) AS Items ON Orders.OrderNumber = Items.OrderNumber
  INNER JOIN LineItems 
  ON Items.LineItemID = LineItems.LineItemID
SELECT Orders.OrderNumber, max(LineItems.Quantity), max(LineItems.Description)
FROM Orders
    INNER JOIN LineItems 
    ON Orders.OrderID = LineItems.OrderID
Group by Orders.OrderNumber
SELECT  Orders.OrderNumber, LineItems2.Quantity, LineItems2.Description
FROM    Orders
LEFT JOIN 
        (
        SELECT  LineItems.Quantity, LineItems.Description, OrderId, ROW_NUMBER()
                OVER (PARTITION BY OrderId ORDER BY (SELECT NULL)) AS RowNum
        FROM    LineItems

        ) LineItems2 ON LineItems2.OrderId = Orders.OrderID And RowNum = 1
select * from users join widgets on widgets.id = (
    select id from widgets
    where widgets.user_id = users.id
    order by created_at desc
    limit 1
)
select o.OrderNumber,
       li.Quantity,
       li.Description
from Orders as o
inner join LineItems as li
on li.OrderID = o.OrderID
where not exists (
    select 1
    from LineItems as li_later
    where li_later.OrderID = o.OrderID
    and li_later.LineItemGUID > li.LineItemGUID
    )
with firstOnly as (
    select Orders.OrderNumber, LineItems.Quantity, LineItems.Description, ROW_NUMBER() over (partiton by Orders.OrderID order by Orders.OrderID) lp
    FROM Orders
        join LineItems on Orders.OrderID = LineItems.OrderID
) select *
  from firstOnly
  where lp = 1
  select *
  from Orders o
    cross apply (
        select CAST((select l.Description + ','
        from LineItems l
        where l.OrderID = s.OrderID
        for xml path('')) as nvarchar(max)) l
    ) lines
SELECT DISTINCT
    o.OrderNumber ,
    FIRST_VALUE(li.Quantity) OVER ( PARTITION BY o.OrderNumber ORDER BY li.Description ) AS Quantity ,
    FIRST_VALUE(li.Description) OVER ( PARTITION BY o.OrderNumber ORDER BY li.Description ) AS Description
FROM    Orders AS o
    INNER JOIN LineItems AS li ON o.OrderID = li.OrderID
SELECT
   Orders.OrderNumber,
   LineItems.Quantity, 
   LineItems.Description
FROM Orders
   INNER JOIN (
      SELECT
         Orders.OrderNumber,
         Max(LineItem.LineItemID) AS LineItemID
       FROM Orders 
          INNER JOIN LineItems
          ON Orders.OrderNumber = LineItems.OrderNumber
       GROUP BY Orders.OrderNumber
   ) AS Items ON Orders.OrderNumber = Items.OrderNumber
   INNER JOIN LineItems 
   ON Items.LineItemID = LineItems.LineItemID
SELECT Orders.OrderNumber, topline.Quantity, topline.Description
FROM Orders
cross apply
(
    select top 1 Description,Quantity
    from LineItems 
    where Orders.OrderID = LineItems.OrderID
)topline