繁体   English   中英

SQL查询:ID相同但类型不同的单独列

[英]SQL query: Separate column where IDs are the same but type is different

基本上我是从一个简单的选择查询中得到的:

SELECT  Site.RefID, SiteName, Dates.Date, Dates.Type
FROM Site, Dates
WHERE Site.RefID = Dates.RefID; 

RefID | SiteName | Date        | Type
1       Sydney       06-12-15   OPENED
1       Sydney       08-12-15   CLOSED
2       Mel          17-12-15   OPENED
2       Mel          19-12-15   CLOSED

但我想将其分开,因此tge结果类似于此:

RefID | SiteName | DateOPENED     | DateCLOSED
1       Sydney       06-12-15     | 08-12-15

基本上我想比较数据跟踪的详细信息

如果这个问题的结构不够完善,请提前致歉:/我是一个完整的初学者

我当时在想一个选择或一个可能的情况下的一个选择,但是我似乎都无法工作

在当前查询中添加GROUP BY ,使用MIN表示开始日期, MAX表示结束日期。

SELECT  Site.RefID, SiteName, MIN(Dates.Date) as DateOPENED, MIN(Dates.Date) as DateCLOSED
FROM Site
  JOIN Dates ON Site.RefID = Dates.RefID
group by fID, SiteName

或者,联接一次以打开,一次联接以关闭:

SELECT  Site.RefID, SiteName, do.Date as DateOPENED, dc.Date as DateCLOSED
FROM Site
  LEFT JOIN (select Refid, Date from Dates where Type = 'OPENED') do ON Site.RefID = do.RefID
  LEFT JOIN (select Refid, Date from Dates where Type = 'CLOSED') dc ON Site.RefID = dc.RefID

您可以使用条件聚合来获得预期的结果:

SELECT  Site.RefID, SiteName, 
        MIN(CASE WHEN Dates.Type = 'OPENED' THEN Dates.Date END) DateOPENED,
        MAX(CASE WHEN Dates.Type = 'CLOSED' THEN Dates.Date END) DateCLOSED
FROM Site
INNER JOIN Dates ON Site.RefID = Dates.RefID
GROUP BY Site.RefID, SiteName 

同样,始终最好使用显式而不是隐式连接语法。

使用case表达式尝试以下方法:

select s.RefID
     , s.Name
     , min(case when d.Type == 'OPENED' then d.Date end) as DateOPENED
     , min(case when d.Type == 'CLOSED' then d.Date end) as DateCLOSED
from Site s 
join Dates d on s.RefID = d.RefID
group by s.RefID, s.Name
SELECT A.RefId, A.SiteName, A.Date DateOpened, B.Date DateClosed
FROM #tbl A JOIN #tbl B
ON A.RefId = B.RefID
AND A.Type = 'OPENED'
AND B.Type = 'CLOSED'

为简单起见,已将查询替换为#tbl (可以根据需要进行处理)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM