Sql 查询以基于另一列的值从单个列返回多个值

Sql 查询以基于另一列的值从单个列返回多个值,sql,Sql,我有一个带有EntryDate和ChecklistDay列的表。它们是日期和整数列。我想返回两个列,一个名为StartDate,另一个名为EndDate,这两个列都从EntryDate列获取它们的值。StartDate将从…返回 SELECT EntryDate AS StartDate FROM TABLE WHERE ChecklistDay = 1 SELECT EntryDate AS EndDate FROM TABLE WHERE ChecklistDay = 10 EndDat

我有一个带有EntryDate和ChecklistDay列的表。它们是日期和整数列。我想返回两个列,一个名为StartDate,另一个名为EndDate,这两个列都从EntryDate列获取它们的值。StartDate将从…返回

SELECT EntryDate AS StartDate FROM TABLE WHERE ChecklistDay = 1
SELECT EntryDate AS EndDate FROM TABLE WHERE ChecklistDay = 10
EndDate将从…返回

SELECT EntryDate AS StartDate FROM TABLE WHERE ChecklistDay = 1
SELECT EntryDate AS EndDate FROM TABLE WHERE ChecklistDay = 10

现在我只想在StartDate和EndDate都返回值的情况下返回一行,这意味着ChecklistDay必须同时具有值1和10才能选择两个EntryDate并返回一行。我在这里使用什么类型的查询?

您可以两次加入同一个表

select startDt.EntryDate as StartDate,
       endDt.EntryDate as EndDate
from table startDt
inner join table endDt
on startDt.id = endDt.id
where startDt.ChecklistDay = 1
and endDt.CheckListDay = 10
这是否有助于:

Select CASE ChecklistDay WHEN 1 THEN EntryDate ELSE NULL as StartDate,   
CASE CheckListDay WHEN 10 THEN DateAdd(day, ChecklistDay, StartDate) ELSE NULL END as EndDate   
from Table

这应该在任何ANSI兼容的DBMS(Oracle、MySql、Sql Server、Postgresql、Informix、DB2等)中运行


您正在使用哪个DBMS?表中的一行如何与同一表中的另一行关联?有一些我们可以通过加入的公共ID吗?有一个ChecklistEntryID PK,还有一个projectd FK。我需要找到每个项目的开始日期和结束日期。如果ChecklistDay 1和10的条目在表中,那么该部分项目已经完成,我需要计算完成所需的天数。明白。这就是为什么我两次列出“table”,但都用了别名。这就是你想要的。您可以将单个表联接到它本身。我在此查询中没有看到表的别名。仅列的别名。在任何情况下,这个数据库的设计都有一个错误——这里没有明确的方法来说明两行是否实际上是一对相关数据。Elmo Bill将表别名为startDt,表别名为endDt,请记住,[as]是可选的如果您不能关联行,那么给定4个开始日期和4个结束日期,您如何只返回4行?或者您希望每个开始日期与每个结束日期的叉积产生16行吗?@ElmoVanKielmo TABLE是实际表名的一个示例,它实际上不是命名表。我会在编辑中更正。还有,我怎样才能使设计更有效率?我希望允许用户在项目工作表中输入他们所在的特定日期。因此,如果里程碑1开始于checklistday 1,那么当他们到达checklistday 10的开始时,它开始于里程碑2,表明里程碑1从他们开始于checklistday 1到10的天数。也许我应该开始另一个线程,这可能不太清楚。他只想为一对行返回一个结果行,其中一行的checklistday=1,另一行的checklistday=10。你的答案很聪明,但不检查互补行是否存在。他只想为一对行返回结果行,其中一行的checklistday=1,另一行的checklistday=10。你是对的@ElmoVanKielmo,我误解了这个问题,那么Bill Gregg的答案是正确的。