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