代码之家  ›  专栏  ›  技术社区  ›  Suraj Kumar zip

将行值获取到列中,其中列值在SQL Server中以整数开头

  •  -1
  • Suraj Kumar zip  · 技术社区  · 6 年前

    下面是我的带有示例数据的SQL Server表结构:

    DateValue            Status     EmpId
    ----------------------------------------
    2018-05-28 8:00        01       2000347
    2018-05-28 20:18       02       2000347
    2018-05-28 8:00        01       2000348
    2018-05-28 17:18       02       2000348
    

    我想要这样的输出:

    sEmpId    Status (1) IN Time           Status (2) Out Time
    ---------------------------------------------------------------
    2000347   2018-05-28 08:00:00.000      2018-05-28 20:18:00.000
    2000348   2018-05-28 08:00:00.000      2018-05-28 17:18:00.000
    

    你可以在这里找到我的尝试- Row To Column

    我得到以下错误

    错误,警告:
    “01”附近有语法错误。

    3 回复  |  直到 6 年前
        1
  •  5
  •   Lukasz Szozda    6 年前

    通常标识符不能以数字开头。您需要用换行符 []

    select sEmpId, [01], [02]
    from
    (
      select sEmpId,dDateTime,sStatus
      from #temp
    ) d
    pivot
    (
      max(dDateTime)
      for sStatus in ([01], [02])
    ) piv;
    

    rextester demo

        2
  •  2
  •   level3looper    6 年前
    Select 
       sEmpId,
       Max(Case When sStatus = '01' Then dDateTime End) As [In],
       Max(Case When sStatus = '02' Then dDateTime End) As [Out]
    From #temp
    Group By sEmpId
    
        3
  •  1
  •   Michał Turczyn    6 年前

    或者,如果输入和输出时间在同一天,可以使用下面的查询:

    select sEmpId,
           min(dDateTime) InTime,
           max(dDateTime) OutTime
    from #temp
    group by sEmpId, day(dDateTime)