【问题标题】:SQL Compare data based on date rows into columnsSQL 根据日期行比较数据成列
【发布时间】:2017-09-13 17:34:20
【问题描述】:

我对 SQL 很陌生,我有一个这样的 SQL 表

Name | Date                | performance_reading_1 | performance_reading_2     
---------------------------------------------------------------------------
BOB   2016-11-05 21:59:59     2000.000                 398776.000
JON   2016-11-05 23:59:59     2120.000                 118273.000
BOB   2016-11-06 13:59:59     3450.000                 228666.000
JON   2016-11-06 09:22:59     2432.000                 158643.000
BOB   2016-12-09 13:59:59     3450.000                 228666.000
JON   2016-12-11 09:22:59     2432.000                 158643.000

基本上我需要一个 sql 语句,它会在 1 行中显示 2 个不同的日期以及每个日期的性能数据。

2 个日期和名称会有所不同,并在变量中传递。 我需要在 $date1 和 $date2 上说出 Name $name

Name | Date 1                | perf_1   | perf_2    | Date 2                  | perf_1   | perf_2
----------------------------------------------------------------------------------------------------------------
BOB   2016-11-05 21:59:59     2000.000    398776.000   2016-12-09 13:59:59     3450.000    228666.000

【问题讨论】:

  • 第三次约会怎么样?
  • 如果它们是空白的,它可能会在第三天或第四天派上用场

标签: sql sql-server date compare multiple-columns


【解决方案1】:

自联接在这里可以很好地工作:

DECLARE @Name varchar(50) = 'Bob'
DECLARE @Date1 datetime = '2016-11-05 21:59:59'
DECLARE @Date2 datetime = '2016-12-09 13:59:59'

SELECT T.Name,
       T.Date as 'Date1',
       T.Performance_Reading_1 as 'perf_1',
       T.Performance_Reading_2 as 'perf_2',
       T2.Date as 'Date2',
       T2.Performance_Reading_1 as 'perf_1',
       T2.Performance_Reading_2 as 'perf_2',
FROM YourTable T
INNER JOIN YourTable T2 on T.Name = T2.Name
WHERE T.Name = @Name
AND T.Date = @Date1
AND T2.Date = @Date2

PS 您的每个 Performance_Reading 的别名对于每个表都是相同的,可能会让人感到困惑..

【讨论】:

  • 谢谢!我会试试这个,有什么方法可以轻松地从日期中删除时间?因为我可以指定例如'2016-11-05'
  • @catalyph 当然,如果您只输入日期,只需在 WHERE 子句中进行转换或转换。 IE。 AND CONVERT(date, T.Date) = @Date1。唯一需要注意的是,如果没有时间戳,您可能会有重复项,例如,Bob 在同一天有两条记录。
  • 谢谢!这完全符合我的需要,我添加了一些调整,因为我需要它们,比如额外的列,一切都很好,谢谢!
  • @catalyph 很酷,乐于助人:)
  • 是否可以将@Name 作为通配符,如 * 或 Not Null ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 2020-10-01
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
相关资源
最近更新 更多