【问题标题】:SQL Convert one column into two based on another columnSQL 根据另一列将一列转换为两列
【发布时间】:2018-05-08 20:06:28
【问题描述】:

使用以下数据集:

Extender_Record_ID: 1, 1, 2, 2, 3, 3, 4, 4, 5, 5
Field_ID: 100, 101, 100, 101, 100, 101, 100, 101, 100, 101
Date: 1/1/2018, 1/2/2018, 1/14/2018, 1/15/2018, 2/1/2018, 2/3/2018, 
      2/15/2018, 2/17/2018, 3/2/2018, 3/5/2018

我正在尝试获得以下输出:

Start Date: 1/1/2018, 1/14/2018, 2/1/2018, 2/15/2018, 3/2/2018  
End Date: 1/2/2018, 1/15/2018, 2/3/2018, 2/17/2018, 3/5/2018

我正在尝试根据 ID 列中的值将日期列拆分为两个单独的日期列。我想将其插入到更大的查询中。

对不起,我是新手。非常感谢任何帮助!

【问题讨论】:

  • 提示:GROUP BYMIN(), MAX().
  • 您使用的是哪个DBMS? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加标签postgresqloracledb2sql-server、...

标签: sql select pivot where multiple-columns


【解决方案1】:
select extendedrecordid, field_id, max(case when field_id = 1 then date else null end )date1,
max(case when field_id = 2 then date else null end )date2
from yourtable group by extendedrecordid, field_id

【讨论】:

  • 我有大约一千行日期,它们都对应于 ID 1 或 ID 2。我得到了最小和最大查询来生成我需要的小例子。有没有对多行效果更好的东西?我也可能完全错了:(
  • 请显示更多您的预期结果,我会为您重新处理查询
  • 我还是没弄好。让我用更多数据发布答案。我似乎无法在 cmets 中做到这一点。非常感谢您的帮助!
  • 好的,请像原来一样以表格形式显示示例数据
【解决方案2】:

它很简单,一个总是min,另一个是max,你可以这样做:

SELECT MIN(DATE) AS Date1
     , MAX(DATE) AS Date2
  FROM ...
GROUP BY ID

或者可能是一些更复杂的枢轴,但我们可能需要知道它的 SQL 风格

【讨论】:

  • 我有大约一千行日期,它们都对应于 ID 1 或 ID 2。我得到了最小和最大查询来生成我需要的小例子。有没有对多行效果更好的东西?我也可能完全错了:(
  • 您能否再添加几行输入/输出,并将它们以之前的格式放置,如果您只是区分 1 或 2,我可以得到更多的想法,可能无法区分
【解决方案3】:

根据您的评论I got the min and max query to produce what i needed for the minor example.,您可能真正需要的是这样的:

SELECT 
CASE WHEN Id = 1 THEN [DateField] END AS Date1, 
CASE WHEN Id = 2 THEN [DateField] END AS Date2
FROM [MyTable]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2019-05-19
    相关资源
    最近更新 更多