【发布时间】:2019-05-24 06:38:54
【问题描述】:
我正在尝试使用 SQL 语句和 NORTHWIND 数据库获取此输出:
Employee Name:Nancy Davolio
Number of Sales:345
Total Sales:192107.60
Employee Name:Andrew Fuller
Number of Sales:241
Total Sales:166537.75
Employee Name:Janet Leverling
Number of Sales:321
Total Sales:202812.84
Employee Name:Margaret Peacock
Number of Sales:420
Total Sales:232890.85
Employee Name:Steven Buchanan
Number of Sales:117
Total Sales:68792.28
...还有 4 个条目
当我使用这个语句时:
USE Northwind
DECLARE @EmployeeName VARCHAR(40),
@NumberOfSales INT,
@TotalSales DECIMAL(10,2),
@Counter TINYINT = 1,
@NumEmployees INT = IDENT_CURRENT('dbo.Employees');
WHILE @Counter < @NumEmployees
BEGIN
--SELECT @EmployeeName = E.FirstName+' '+E.LastName
--SELECT @NumberOfSales = count(od.OrderID)
SELECT @TotalSales = SUM(unitprice * quantity * (1 - Discount))
FROM Employees E
JOIN Orders AS O ON O.EmployeeID = E.EmployeeID
JOIN [Order Details] AS OD ON OD.OrderID = O.OrderID
WHERE E.EmployeeID = @Counter
PRINT 'Employee Name: '--+ @EmployeeName;
PRINT 'Number of Sales: '--+ LTRIM(STR(@NumberOfSales));
PRINT 'Total Sales: '+CONVERT(varchar(10),@TotalSales);
PRINT '';
SET @Counter += 1;
END
我可以让每个选择单独工作,但我无法弄清楚让单个 SELECT 语句完成所有工作的语法。我也应该能够用三个SET 语句来做到这一点,但我也无法弄清楚。指向这两种可能性的指针会很棒。
这是实际的步骤用语: “在循环中,使用 SELECT 语句检索每个员工的名字和姓氏、每个员工处理的订单数量以及每个员工的总销售额(您正在逐个处理每个员工)。您将需要将多个表连接在一起并使用聚合函数来获得计数和总数。将串联的全名、销售额和总销售额分配给适当的变量。"
输出应该在消息选项卡中,除了上面列出的预期输出之外,没有表格或格式。
【问题讨论】:
-
“输出应在消息选项卡中”表示使用
Print、RaIsError或Throw输出数据。 AFAIK,查询结果无法重定向到“消息”选项卡。您可以编写一个查询,例如就像那些用于构建逗号分隔列表的方法一样,生成包含所有数据(包括换行符)的单个字符串,然后Print生成该结果。这不是通常编写应用程序的方式。
标签: sql sql-server tsql select while-loop