【问题标题】:sql server-how min and max blank the other row if they same resultsql server-如果结果相同,则最小值和最大值如何空白另一行
【发布时间】:2019-06-11 10:53:56
【问题描述】:

我希望将 EmpID 加入 EmployeeNo 并结合第二个表中的姓氏、名字和中间名,我希望条目将 O 和 I 与 min 和 max 分开,但如果它们没有 min或 max 变为空白或 null 我只想将某行变为空白,因为如果它们不空白该行,结果是相同的。

----------------------------------------------- ------

这是第一个

|参赛作品.......................... |记录日期 .................... .|..Empid ....|参考 |
|..0016930507201907:35I....|..2019-05-07 00:00:00.000 .... |..001693 .........|..1693|
|..0016930507201917:06O .|..2019-05-07 00:00:00.000 ........|..001693 .........|..1693|
|..0016930507201907:35I.. .|..2019-05-08 00:00:00.000 .... |..001693 ....| ..1693|
.................................... ......|..2019-05 -08 00:00:00.000 .... | ..001693 ........|..1693|

----------------------------------------------- -----


第二张桌子

.....|姓|.............|名字| ………………|中间名| .....................|员工编号| .....|克鲁兹|.......................|金佰利|....... ......................|卡斯蒂略| ................................| 001693|


我想将这两个表与第二个表结合起来,将 lastname、FirstName 和 middleName 结合起来。 employeeNo 加入 Empid 但条目将在 I 和 O 之间分开,具有特定 empId 的最小值或最大值,但如果条目没有 I 或 O,它将像这样和 where 一样为空白


|姓名.....................................|员工编号|..... .......RecordDate............|......TimeIn............|TimeOut|
|马萨诸塞州克鲁兹。加利福尼亚州金伯利....|001693........|2019-05-07 00:00:00.000 ..|...07:35.......... ....|05:06| |马萨诸塞州克鲁兹。金伯利,CA....|001693........|2019-05-08 00:00:00.000...|...07:35 |


【问题讨论】:

  • 你需要多解释一下。提出一个您想要的简单示例并展示它可能比使用实际用例更容易。 O和I是什么?他们怎么能没有最小值或最大值?我很确定你想要一个 CASE 声明,所以也许开始调查一下。
  • 欢迎金佰利。在这里获得快速答案的方法是非常简单地解决问题。为此,您应该将我们快速重现数据所需的所有内容粘贴到您的问题中,如创建表(表变量会这样做)、插入语句和您的预期结果。如果你也尝试过一些 sql 显示。发布图像不是一个好方法,因为它很难跟踪,任何愿意提供帮助的人都必须自己输入所有数据。帮助我们为您提供帮助。
  • 很抱歉给您带来不便,我会尽力解释是否可以要求再看一遍

标签: sql-server


【解决方案1】:

你可以试试这个,

SELECT CONCAT(t2.[LastName], ', ', t2.[FirstName], ', ', t2.[MiddleName]) AS [Name],
    t2.[EmployeeNO], t1.[RecordDate], 
    MIN(IIF(ISNULL(CHARINDEX('I', t1.[Entries], 0), -1) > 0, SUBSTRING(t1.[Entries], LEN(t1.[Entries]) - 5, 6), NULL)) AS [TimeIn],
    MAX(IIF(ISNULL(CHARINDEX('O', t1.[Entries], 0), -1) > 0, SUBSTRING(t1.[Entries], LEN(t1.[Entries]) - 5, 6), NULL)) AS [TimeOut]
    FROM [dbo].[Table_2] t2
    RIGHT OUTER JOIN [dbo].[Table_1] t1 ON t2.[EmployeeNO] = t1.[Empid]
    GROUP BY CONCAT(t2.[LastName], ', ', t2.[FirstName], ', ', t2.[MiddleName]),
    t2.[EmployeeNO], t1.[recordDate]

*注意:根据您的问题

--[Table_1] 是第一个表

--[Table_2] 是第二张桌子

【讨论】:

  • 条目栏的类型是什么?您使用的是哪个版本的 mssql?
  • 条目列数据类型?
  • 曾尝试将条目保留为 nvarchar,它可以工作。发布不起作用的数据。
  • 非常感谢!如果我的项目有问题或有关我的工作系统的问题,请问如何与您联系?
  • 先生,我有疑问如何将时间设置为 12 小时而不是 24 小时
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多