【发布时间】:2018-10-30 05:34:47
【问题描述】:
我正在尝试让此查询在我正在构建的 winform 应用程序中填充报告查看器(并将在填充要查看的报告之前将查询中的参数更改为在表单上选择的值)。但是over功能无法正常工作。用户将从单选框、下拉列表等中输入参数,单击搜索,reportviewer 将打开以便他们可以打印。查询非常丑陋,我已经研究了一段时间。这是我获得所需格式的结果集的唯一方法。
SQL QUERY 寻求帮助以缩短相同的结果
DECLARE @EndReport DATETIME, @StartReport DATETIME, @Location INT, @Department varchar(50)
SET @EndReport = '10-15-2018' SET @StartReport = '10-15-2018' SET @Department = 'fb' SET @Location = 10
SELECT row_number() over (order by (ai.FirstName + ' ' + ai.LastName)) RowNum
,AssociateName = isnull(upper(ai.FirstName + ' ' + ai.LastName),'**' + cast(t.ID as varchar(30)) + '**')
,ID = t.ID
,Codes = (t.DeptCode + '-' + t.OpCode)
,TimeSUM = cast(SUM(datediff(second,StartTime, FinishTime) /3600.0) as decimal (6,2))
,Units = SUM(Units)
,UPH = cast(isnull(sum(Units) / nullif(sum(datediff(minute,StartTime,FinishTime))*1.0,0),0.0)*60 as decimal(10,0))
into temptable10
FROM TimeLogNEW t LEFT JOIN AssociateInfo ai
ON t.ID = ai.ID
JOIN GoalSetUp g
ON (t.DeptCode + '-' + t.OpCode) = (g.DeptCode + '-' + g.OpCode)
WHERE EventDate between @StartReport and @EndReport
and t.Location = @Location and g.location= @Location and ((t.DeptCode + t.OpCode) in (g.DeptCode + g.OpCode)) and t.DeptCode = @Department
GROUP BY t.DeptCode,t.OpCode,ai.FirstName,ai.LastName, t.ID
SELECT
[Associate Name] = AssociateName
,[Codes] = Codes
,[TimeSUM] = TimeSUM
,[Units] = Units
,[UPH] = UPH
,[UPH Target] = Goal
,[Actual %] = CASE WHEN goal = 0 then '0%'
else convert(varchar,cast(100* (isnull(UPH,0)/nullif(Goal,0)) as decimal(10,0))) + '%' END
FROM goalsetup g join temptable10 on g.DeptCode = left(codes,2)and g.opcode = RIGHT(codes,2)
WHERE g.Location = @Location
ORDER BY Codes, UPH Desc
drop table temptable10
SQL 结果集
Visual Studio 错误
添加 Visual Studio 屏幕截图。在下面回答后更新
【问题讨论】:
-
row_number() 列生成后好像没有使用,从查询中删除即可。
标签: sql sql-server visual-studio sql-server-2008-r2