TSQL条件联接&;参考表维度

TSQL条件联接&;参考表维度,tsql,Tsql,我试图找出一个销售机会在5个不同阶段中的每一个阶段持续多长时间。问题在于salesforce中的数据扁平化。目前的结构如下: 表:历史 TaskID | OppID | STAGE | IQ | DISCO | TECH | COMMERCIAL | CLOSE 1 Op1 IQ 5 0 0 0 0 2 Op1 DISCO 0 10 0 0

我试图找出一个销售机会在5个不同阶段中的每一个阶段持续多长时间。问题在于salesforce中的数据扁平化。目前的结构如下:

表:历史

TaskID | OppID | STAGE | IQ | DISCO | TECH | COMMERCIAL | CLOSE
  1     Op1       IQ       5     0      0        0          0
  2     Op1       DISCO    0     10     0        0          0
  3     Op1       TECH     0     0      15       0          0
  4     Op1       COMM     0     0      0        5          0
  5     Op2       IQ       2     0      0        0          0  
  6     Op2       CLOSE    0     0      0        0          3
  7     Op3       IQ       3     0      0        0          0
上表有~417k行。仅创建了49k个个人Opportunity,因此49k是我的表的目标行数

我试过下面的连接。我觉得好像我在1码线上,只需要推一下

下面是一张有39M行的表格

SELECT a.OpportunityID, b.IQ, c.Disco, d.Tech, e.Commercial, f.Close
FROM OppHistory a
  JOIN OppHistory b ON a.OppID = b.OppID
  JOIN OppHistory c ON b.OppID = c.OppID
  JOIN OppHistory d ON c.OppID = d.OppID
  JOIN OppHistory e ON d.OppID = e.OppID
  JOIN OppHistory f ON e.OppID = f.OppID
下表给出了一个约50k行的表格,但是,只包含了一些精选的机会,每个OppID都会重复500次左右

SELECT DISTINCT a.OpportunityID, b.IQ, c.Disco, d.Tech, e.Commercial, 
f.Close
FROM OppHistory a
  JOIN OppHistory b ON a.OppID = b.OppID
  JOIN OppHistory c ON b.OppID = c.OppID
  JOIN OppHistory d ON c.OppID = d.OppID
  JOIN OppHistory e ON d.OppID = e.OppID
  JOIN OppHistory f ON e.OppID = f.OppID
下表中给出了0个结果

SELECT b.OppID, Duration AS IQDuration, Duration AS DiscoDuration, 
Duration AS TEDuration, Duration AS CommercialsDuration, Duration AS 
ClosedDuration
FROM OppHistory b,( 
    SELECT q.IQ AS Duration FROM OppHistory q
     UNION
    SELECT d.Disco AS Duration FROM OppHistory d
     UNION
    SELECT t.Tech AS Duration FROM OppHistory t
     UNION
    SELECT c.Comm AS Duration FROM OppHistory c
     UNION
    SELECT l.Closed AS Duration FROM OppHistory l
    )a
我需要的是在单独的列中列出每个阶段的持续时间,以获得不同的机会:

OppID |IQ | Disco | TechEval | Commercial | Close
 Op1    5     10       15         5          0
 Op2    2     0        0          0          3
 Op3    3     0        0          0          0

我想你在追求这个:

SELECT OppID, SUM(IQ) AS IQ, SUM(Disco) AS Disco, SUM(Tech) AS Tech, SUM(Commercial) AS Commercial, SUM(Close) AS Close
FROM OppHistory
GROUP BY OppID

我想你在追求这个:

SELECT OppID, SUM(IQ) AS IQ, SUM(Disco) AS Disco, SUM(Tech) AS Tech, SUM(Commercial) AS Commercial, SUM(Close) AS Close
FROM OppHistory
GROUP BY OppID

这不仅仅是一个简单的分组查询吗?这不仅仅是一个简单的分组查询吗?谢谢Barney-这很有效。看起来我想得太多了汉克斯·巴尼-这很有效。看来我想得太多了