gpt4 book ai didi

sql - 如何从子查询(在 SQL Server 中)中选择多列,而主查询中的每条记录应有一条记录(选择前 1 条)?

转载 作者:行者123 更新时间:2023-12-03 04:50:16 25 4
gpt4 key购买 nike

我知道我可以使用以下语法从子查询中选择一列:

SELECT A.SalesOrderID, A.OrderDate,
(
SELECT TOP 1 B.Foo
FROM B
WHERE A.SalesOrderID = B.SalesOrderID
) AS FooFromB
FROM A
WHERE A.Date BETWEEN '2000-1-4' AND '2010-1-4'

但是使用子查询中的多列(在我的例子中是 select top 1 子查询)的正确语法是什么?非常感谢。

最佳答案

以下是从子查询中选择多列的一般方法:

SELECT
A.SalesOrderID,
A.OrderDate,
SQ.Max_Foo,
SQ.Max_Foo2
FROM
A
LEFT OUTER JOIN
(
SELECT
B.SalesOrderID,
MAX(B.Foo) AS Max_Foo,
MAX(B.Foo2) AS Max_Foo2
FROM
B
GROUP BY
B.SalesOrderID
) AS SQ ON SQ.SalesOrderID = A.SalesOrderID

如果您最终想要做的是从 Foo 具有最高值的行中获取值(而不是 Foo 的最大值和 Foo2 的最大值 - 这不是同一件事),那么通常会出现以下情况比子查询工作得更好:

SELECT
A.SalesOrderID,
A.OrderDate,
B1.Foo,
B1.Foo2
FROM
A
LEFT OUTER JOIN B AS B1 ON
B1.SalesOrderID = A.SalesOrderID
LEFT OUTER JOIN B AS B2 ON
B2.SalesOrderID = A.SalesOrderID AND
B2.Foo > B1.Foo
WHERE
B2.SalesOrderID IS NULL

您基本上是说,给我 B 中的行,我在 B 中找不到具有相同 SalesOrderID 和更大 Foo 的任何其他行。

关于sql - 如何从子查询(在 SQL Server 中)中选择多列,而主查询中的每条记录应有一条记录(选择前 1 条)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/583954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com