如何选择查询结果作为一行结果?

时间:2019-05-11 13:14:54

标签: sql-server tsql

朋友! 我有一个查询和结果。当我选择然后我得到结果。 但我想在一行中看到那个结果。

现在查询结果就是这样

Agreement_no Total_Time   Officer_name         Sp/Tt/by_Of    Sp/Tt/for l- pros
999Li74         0:18:19   'Mr.Jason'               0:02:00      0.40 sec
999Li74         0:18:19   'Mr.Jason'               0:02:00      0.25 sec
999Li74         0:18:19   'Mr.Jason'               0:02:00      0.40 sec
999Li74         0:18:19   'Mr.Jason'               0:02:00      0.15 sec
999Li74         0:18:19  'Mr.Firdovsi'             0:16:19      0.42 sec
999Li74         0:18:19  'Mr.Firdovsi'             0:16:19      0.20 sec
999Li74         0:18:19  'Mr.Firdovsi'             0:16:19      1.2 sec
999Li74         0:18:19  'Mr.Firdovsi'             0:16:19      11.1 sec
999Li74         0:18:19  'Mr.Firdovsi'             0:16:19      3.1 sec
999Li74         0:18:19  'Mr.Firdovsi'             0:16:19      0.13 sec

我从12个JOINED表中查询此结果。

第一列是贷款批准的贷款 agreement_no 。 第二个 Total_Time 列是使用[DATEDIFF]和[OVER PARTITION BY] Agreement_no的开始时间和结束时间的结果。 第三列是提供贷款和批准贷款的人员姓名。

第4列( Sp / Tt / by_Of -按官员花费总时间)是使用[DATEDIFF]和[OVER PARTITION BY] Officer_Name 的开始时间和结束时间的结果>。

第5列( Sp / Tt / l-pros -借用假体的总时间)是使用[DATEDIFF]的开始时间和结束时间的结果。

当我按天查询批准的贷款时,由于这种麻烦,我看到很多结果。

我希望查询结果如下所示

Agreement_no Total_Time Officer_name Sp/Tt/by_Of Officer_name2 Sp/Tt/by_Of
999Li74      0:18:19    Mr.Jason     0:02:00     Mr.Firdovsi   0:16:19

注意:第五列并不重要。

如果还有其他贷款,我也希望如下所示

Agreement_no Total_Time Officer_name Sp/Tt/by_Of Officer_name2 Sp/Tt/by_Of
999Li74      0:18:19    Mr.Jason     0:02:00     Mr.Firdovsi   0:16:19
1000Li01     0:27:30    Mr.Jon       0:12:15     Mr.Felaket    0:15:15

2 个答案:

答案 0 :(得分:0)

我将使用临时表解决这个问题。第一个表#DataIn应该包含查询结果,就像表中显示的一样。

    SELECT [Agreement_no]
      ,[Total_Time]
      ,[Officer_name]
      ,[Sp/Tt/by_Of]
      ,CAST(REPLACE([Sp Tt for], ' sec', '') AS decimal(4,2)) AS [Sp/Tt/for l- pros]
    INTO #test1
    FROM #DataIn;

要在#DataIn中获取数据,您应该使用以下方法更改查询:

    SELECT … INTO #DataIn …

在我的查询中,REPLACE是从[Sp / Tt / for l-pros]中删除“ sec”,而CAST是将值转换为十进制值。 您的数据(在#Test1中)现在如下所示:

Agreement_no Total_Time   Officer_name         Sp/Tt/by_Of    Sp/Tt/for l- pros
999Li74         0:18:19   'Mr.Jason'               0:02:00      0.40
999Li74         0:18:19   'Mr.Jason'               0:02:00      0.25
999Li74         0:18:19   'Mr.Jason'               0:02:00      0.40
999Li74         0:18:19   'Mr.Jason'               0:02:00      0.15
999Li74         0:18:19  'Mr.Firdovsi'             0:16:19      0.42
999Li74         0:18:19  'Mr.Firdovsi'             0:16:19      0.20
999Li74         0:18:19  'Mr.Firdovsi'             0:16:19      1.2
999Li74         0:18:19  'Mr.Firdovsi'              0:16:19      11.1
999Li74         0:18:19  'Mr.Firdovsi'             0:16:19      3.1
999Li74         0:18:19  'Mr.Firdovsi'             0:16:19      0.13

现在,您可以按Officer_name汇总[Sp / Tt / for l-pros]栏:

SELECT [Agreement_no]
      ,[Total_Time]
      ,[Officer_name]
      ,[Sp/Tt/by_Of]
      ,CONVERT(varchar, DATEADD(ms, SUM ([Sp/Tt/for l- pros]) * 1000, 0), 114) AS [Sp/Tt/for l- pros]
FROM #test1
GROUP BY [Officer_name], [Agreement_no], [Total_Time], [Sp/Tt/by_Of];
此查询中的

DATEADD用于将结果值显示为时间。为此,我将以毫秒为单位计算时间(将以秒为单位的值乘以1000)。 该查询的结果:

Agreement_no        Total_Time  Officer_name    Sp/Tt/by_Of Sp/Tt/for l- pros
999Li74             0:18:19     'Mr.Firdovsi'    0:16:19        00:00:16:150
999Li74             0:18:19     'Mr.Jason'       0:02:00        00:00:01:200

关于保罗

答案 1 :(得分:-1)

保罗。 但是我只想看下面的结果。

Agreement_no Total_Time Officer_name Sp/Tt/by_Of Officer_name2 Sp/Tt/by_Of

999Li74 0:18:19 Mr.Jason 0:02:00 Mr.Firdovsi 0:16:19