我有两个表,一个包含记录,一个日志日期时间戳何时执行操作。示例:
CREATE TABLE MyRecord(
RecNumber INT IDENTITY(1,1) PRIMARY KEY
,TaskDetail NVARCHAR(200)
)
CREATE TABLE MyLOG(
LogID INT IDENTITY(1,1) PRIMARY KEY
,DTStamp DATETIME2(2)
,TaskName NVARCHAR(10)
,RecNumber
,FOREIGN KEY ( RecNumber ) references MyRecord(RecNumber )
)所以,例如,如果我有
|RecNumber|TaskDetail
| 1 | Some Task
|LogID|DTStamp |TaskName |RecNumber|
| 1 | 2014-11-11 00:00:00.00|StartTask | 1 |
| 2 | 2014-11-11 00:01:00.00|EndTask | 1 |我希望返回一个查询:
|RecNumber|TaskDetail| Start Time | End Time |
| 1 | Some Task| 2014-11-11 00:00:00.00 | 2014-11-11 00:01:00.00|现在,我知道我可以使用嵌套的select语句来获得开始和结束时间。使用一个连接,我可以得到开始时间或结束时间。如何在不使用嵌套SQL的情况下获得两者?或者-嵌套select语句是最好的方法吗?
也许我搞错了。
发布于 2014-11-12 00:14:55
你可以用不同的方式做这件事。下面是一种只使用join的方法,假设每种类型最多有一个匹配行:
select r.*, ls.DTStamp as StartTask, le.DTStamp as EndTask
from MyRecord r left join
MyLog ls
on r.recNumber = ls.recNumber and ls.TaskName = 'StartTask' left join
MyLog le
on r.recNumber = le.recNumber and le.TaskName = 'EndTask;发布于 2014-11-12 00:18:21
另一种方法是条件聚合:
select r.recnumber,
r.taskdetail,
max(case when l.taskname = 'StartTask' then l.dtstamp end) as start_time,
max(case when l.taskname = 'EndTask' then l.dtstamp end) as end_time
from myrecord r
join mylog l
on r.recnumber = l.recnumber
group by r.recnumber,
r.taskdetailhttps://stackoverflow.com/questions/26876956
复制相似问题