Sql 从子查询返回第一个结果的查询
我试图创建一个查询,返回结果集中子查询的结果 以下是我正在使用的表格:Sql 从子查询返回第一个结果的查询,sql,sql-server,Sql,Sql Server,我试图创建一个查询,返回结果集中子查询的结果 以下是我正在使用的表格: Orders OrderDetails ------- ----------- orderId orderDetailId (other data) orderId productName 我想获得每个订单的前两个订单详细信息(大多数订单只有一个或两个详细信息)。以下是所需结果集的示例: orderId (othe
Orders OrderDetails
------- -----------
orderId orderDetailId
(other data) orderId
productName
我想获得每个订单的前两个订单详细信息(大多数订单只有一个或两个详细信息)。以下是所需结果集的示例:
orderId (other order data) productName1 productName2
------- ------------------ ------------ ------------
1 (other order data) apple grape
2 (other order data) orange banana
3 (other order data) apple orange
这就是我迄今为止所尝试的:
SELECT o.orderid,
Max(CASE WHEN detail = 1 THEN oi.productname END) AS ProductName1,
Max(CASE WHEN detail = 2 THEN oi.productname END) AS ProductName2
FROM orders AS o
OUTER apply (SELECT TOP 2 oi.*,
Row_number() OVER (ORDER BY orderdetailid) AS detail
FROM orderdetails AS oi
WHERE oi.orderid = o.orderid) AS oi
GROUP BY o.orderid
我在托管电子商务解决方案的自定义报告模块中执行此操作,并得到以下无用的语法错误:SQL错误:“(”附近的语法不正确
很遗憾,我不知道我使用的是哪个版本的SQL Server。客户支持什么都不知道,选择@版本无效
注意,尽管错误消息按名称引用函数,但似乎未正确支持row_number()函数
感谢您的帮助!这里有一个不使用交叉应用的替代方案。您的排名是正确的,但我按顺序添加了一个分区
SELECT
*
FROM
(
SELECT
o.orderid,
ProductName=oi.productcode,
RowNumber=ROW_NUMBER() OVER (PARTITION BY o.orderid ORDER BY oi.orderdetailid)
FROM
orders as o
INNER JOIN orderdetailid oi ON oi.orderid=o.orderid
)AS X
WHERE
RowNumber=1
不使用行号
SELECT
orderdetails.*
Q1.*
FROM
(
SELECT
o.*,
FirstOrderDetailID=(SELECT MIN(orderdetails.orderdetailsid) FROM orderdetails WHERE orderid=o.orderid)
FROM
orders o
)AS Q1
LEFT OUTER JOIN orderdetails oi ON oi.orderdetailsid=Q1.FirstOrderDetailID
如果您只是选择了
orderid
和产品,则根本不需要加入:
select orderid, productcode
from (SELECT oi.orderid, oi.productcode,
row_number() over (partition by oi.orderid order by oi.orderdetailid) as seqnum
FROM orderdetails oi
) oi
where seqnum = 1;
如果row\u number()
不起作用,这可能无法解决问题,但它简化了查询。您也可以使用min()
方法完成此操作:
select orderid, productcode
from orderdetails oi
where oi.orderdetailid in (select min(orderdetailid) from orderdetails group by orderid);
感谢您的快速回复。我修正了一点输入错误,将表orderdetails而不是orderdetailid内部联接。之后,它给了我语法错误:SQL错误:“orderid”附近的语法不正确。仅为了GRIN,我删除了“Partition by o.orderid”,它给了我语法错误:SQL错误:orderid附近的语法不正确”(')。有什么想法吗?也许您查询的数据库是