簡體   English   中英

簡化查詢以用作Winform RDC報告中的數據集

[英]Simplify Query to be used as dataset in winform rdlc report

我正在嘗試讓此查詢填充我正在構建的Winform應用程序中的reportviewer(並將在填充要查看的報告之前將查詢中的參數更改為在窗體上選擇的值)。 但是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()列沒有明顯的原因,因此我將其刪除
  • 制作表格時, Codes = (t.DeptCode + '-' + t.OpCode) ,后跟:
  • join temptable10 on g.DeptCode = left(codes,2)and g.opcode = RIGHT(codes,2)
  • 效率低下且不必要,只需保留兩列
  • 實際上,發生了很多dept和op代碼的連接,這似乎是不必要的,只需使用兩列就可以了。

  • between用於日期范圍時, between是一條狗,我強烈建議您使用下面查詢中的內容。 >=< (+1 day)日期范圍構造適用於所有日期/時間數據類型

  • 請在引用任何列時使用表別名,像我這樣的讀者無法知道這些列中的某些來自哪個表,這使得調試/維護變得更加困難。

建議查詢:

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
    AssociateName = ISNULL(UPPER(ai.FirstName + ' ' + ai.LastName), '**' + CAST(t.ID AS varchar(30)) + '**')
  , ID =            t.ID
  , Codes =         (t.DeptCode + '-' + t.OpCode)
  , 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 = g.DeptCode  AND t.OpCode = g.OpCode
WHERE EventDate >= @StartReport AND EventDate < dateadd(day,1,@EndReport)
AND t.Location = @Location
AND g.location = @Location
AND t.DeptCode = @Department
GROUP BY
    t.DeptCode
  , t.OpCode
  , ai.FirstName
  , ai.LastName
  , t.ID

SELECT
    [Associate Name] =  t10.AssociateName
  , [Codes] =           t10.Codes
  , [TimeSUM] =         t10.TimeSUM
  , [Units] =           t10.Units
  , [UPH] =             t10.UPH
  , [UPH Target] =      g.Goal
  , [Actual %] =       
                CASE
                    WHEN g.goal = 0 THEN '0%'
                    ELSE CONVERT(varchar, CAST(100 * (ISNULL(t10.UPH, 0) / NULLIF(g.Goal, 0)) AS decimal(10, 0))) + '%'
                END
FROM goalsetup g
JOIN temptable10 t10
    ON g.DeptCode = t10.DeptCode
    AND g.opcode = t10.opcode
WHERE g.Location = @Location
ORDER BY
     t10.Codes
  ,  t10.UPH DESC

DROP TABLE temptable10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM