sql - 寻找第二天的数据

时间:2017-02-15 07:44:48

标签: sql-server

我有以下代码,工作正常。

 SELECT 
       pg.pgrpName1          [Santiye],
       p.prsncode            [Sicil No],
       p.[prsnname1]         [Adi],
       p.[prsnname2]         [Soyadi],
       CLT.clntName1         [Firmasi],
       fg3.grp3Name1         [Gorevi],
       prf.pcntrName1        [Ekibi],
       lnk11.lgrp11Name1     [Kaldigi Yer],
       lnk12.lgrp12Name1 +' - '+lnk12.lgrp12Name2 [Kamp/Adres],
       lnk13.lgrp13Name1     [Oda No],
       cast(t.ioTransactionDate as date) as Tarih,
       t.[iotransactiondate] [Giris Tarihi/Saati],
       (SELECT 

        t2.[iotransactiondate] 


        FROM   [Exen].[dbo].[IOTransaction] t2



        WHERE  ( t2.[iotransactiondate] = (SELECT Min(m.[ioTransactionDate])
                                  FROM   IOTransaction m
                                  WHERE  m.ioPrsnRefId = t2.ioPrsnRefId
                                         AND Cast(m.[iotransactiondate] AS DATE)
                                             = Cast
                                             (
                                             t2.[iotransactiondate] AS DATE)
                                  GROUP  BY m.ioPrsnRefId)
          OR t2.[iotransactiondate] = (SELECT Max(m.[iotransactiondate])
                                      FROM   IOTransaction m
                                      WHERE  m.ioPrsnRefId = t2.ioPrsnRefId
                                             AND Cast(m.[iotransactiondate] AS
                                                      DATE) =
                                                 Cast(
                                                 t2.[iotransactiondate] AS DATE)
                                      GROUP  BY m.ioPrsnRefId) )


       and ioStatus = 1
       and cast(t2.ioTransactionDate as date) = cast(t.ioTransactionDate as date) 
       and t.ioPrsnRefId = t2.ioPrsnRefId

GROUP  BY 
          t2.[iotransactiondate]

         )



       AS  [Cikis Tarihi/Saati],
       prsnEText4 [Vardiya],
       tz.tzoneName1 [GECE/GUNDUZ]


FROM   [Exen].[dbo].[IOTransaction] t
       LEFT JOIN dbo.person p
              ON t.ioPrsnRefId = p.prsnRefId
       LEFT JOIN dbo.PersonShift ps
              ON ps.psPrsnRefId = p.prsnRefId
       LEFT JOIN dbo.TimeZoneMess tz
              ON tz.tzoneRefId = ps.psTzoneRefId
       LEFT JOIN dbo.[PersonGroup] pg
              ON pg.pgrpRefId = p.prsnPgrpRefId 
       LEFT JOIN FreeGroup3 fg3
              ON fg3.grp3RefId = p.prsnGrp3RefId
       left join Client CLT
              ON CLT.clntRefId = P.prsnClntRefId
       LEFT JOIN [ProfitCenter] prf
              ON prf.pcntrRefId = p.prsnPcntrRefId  
       LEFT JOIN LinkedGroup11 lnk11
              ON lnk11.lgrp11RefId = p.prsnLgrp11RefId  
       LEFT JOIN LinkedGroup12 lnk12
              ON lnk12.lgrp12RefId = p.prsnLgrp12RefId  
       LEFT JOIN LinkedGroup13 lnk13
              ON lnk13.lgrp13RefId = p.prsnLgrp13RefId


WHERE  ( t.[iotransactiondate] = (SELECT Min(m.[ioTransactionDate])
                                  FROM   IOTransaction m
                                  WHERE  m.ioPrsnRefId = t.ioPrsnRefId
                                         AND Cast(m.[iotransactiondate] AS DATE)
                                             = Cast
                                             (
                                             t.[iotransactiondate] AS DATE)
                                  GROUP  BY m.ioPrsnRefId)
          OR t.[iotransactiondate] = (SELECT Max(m.[iotransactiondate])
                                      FROM   IOTransaction m
                                      WHERE  m.ioPrsnRefId = t.ioPrsnRefId
                                             AND Cast(m.[iotransactiondate] AS
                                                      DATE) =
                                                 Cast(
                                                 t.[iotransactiondate] AS DATE)
                                      GROUP  BY m.ioPrsnRefId) )
       AND p.[prsnname1] IS NOT NULL
       AND t.iotransactiondate >= '00:00:00 11.12.2016'
       AND t.iotransactiondate <= '23:59:00 15.12.2016'
       AND ps.psStartDate <= t.[iotransactiondate]
       AND ps.psFinishDate > t.[iotransactiondate] 
       AND tz.tzoneRefId =5
       and ioStatus = 0
GROUP  BY pg.pgrpName1  ,
          t.ioPrsnRefId,
          prsncode,
          prsnname1,
          prsnname2,
          t.[iotransactiondate],
          t.iostatus,
          tz.tzoneName1,
          ps.psStartDate,
          ps.psFinishDate,
          prsnEText4,
          fg3.grp3Name1,
          CLT.clntName1,
          prf.pcntrName1,
          lgrp11Name1,
          lgrp12Name1,
          lgrp12Name2,
          lgrp13Name1

但我需要[Cikis Tarihi/Saati]列的第二天数据,这就是为什么我将该部分修改为

and cast(t2.ioTransactionDate as date) = cast(dateadd(day,1,t.ioTransactionDate) as date)

例如,当列[Giris Tarihi/Saati]2016-12-12时,列[Cikis Tarihi/Saati]上的数据应为2016-12-13

但它返回错误

  

Msg 512,Level 16,State 1,Line 1 Subquery返回的值超过1   值。当子查询遵循=,!=,&lt;,&lt; =,

时,不允许这样做      
    

,&gt; =或当子查询用作表达式时。

  
我在做错了什么?

有什么建议吗?

0 个答案:

没有答案