Sql server 从数据库中选择项目

Sql server 从数据库中选择项目,sql-server,Sql Server,我目前正在开发一个购物车,在管理方面,我正在尝试获取所有尚未发货的订单和物品。我正在使用下面的存储过程,但它并没有按我所希望的方式工作,它正在为购物车中的每个项目提取名称、发票、价格等,我想要的是提取一次订单信息,然后列出每个订单的所有项目及其数量和价格 CREATE PROCEDURE dbo.sp_GetOrdersNotShipped AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from --

我目前正在开发一个购物车,在管理方面,我正在尝试获取所有尚未发货的订单和物品。我正在使用下面的存储过程,但它并没有按我所希望的方式工作,它正在为购物车中的每个项目提取名称、发票、价格等,我想要的是提取一次订单信息,然后列出每个订单的所有项目及其数量和价格

CREATE PROCEDURE dbo.sp_GetOrdersNotShipped 
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    BEGIN TRY
        SELECT
            p.ProductName AS 'Name',
            o.OrderId AS 'OrderId',
            o.InvoiceNumber AS 'Invoice',
            o.OrderTotal AS 'Total',
            oi.ProductQuantity AS 'Quantity'
        FROM
            Products p INNER JOIN OrderItems oi ON p.ProductId = oi.ProductId
            INNER JOIN Orders o on oi.OrderId = o.OrderId
        WHERE
            o.IsShipped = 0
    END TRY
    BEGIN CATCH
        DECLARE @ErrorNumber INT = ERROR_NUMBER();
        DECLARE @ErrorLine INT = ERROR_LINE();
        DECLARE @ErrorMessage NVARCHAR(4000) = ERROR_MESSAGE();
        DECLARE @ErrorSeverity INT = ERROR_SEVERITY();
        DECLARE @ErrorState INT = ERROR_STATE();

        PRINT 'Actual error number: ' + CAST(@ErrorNumber AS VARCHAR(10));
        PRINT 'Actual line number: ' + CAST(@ErrorLine AS VARCHAR(10));

        RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState);
    END CATCH
END
GO

你能发布一个你正在寻找的示例结果和你当前得到的结果吗?你是说你只需要一行订单信息,然后是所有行项目?这有点奇怪。您要么需要两个查询,要么需要一个非常奇怪的联合版本。此外,应避免使用sp_uu前缀。您的记录集可能会恢复到应有的状态,每个细节行都会重复标题信息。在您的表示层SSRS、Crystal等,您可以指定显示一次标题信息及其下方的详细信息,直到标题下一次更改,然后重复。正如@SeanLange所说,一个记录集采用这种形式将需要一个非常不愉快的组合。您想要的结果集是什么样子的?应该有哪些栏目?