2013-07-21 41 views
0

我的查询是这样的:转换结果列于行导致SQL

SELECT v.Vtype, 
     SUM(DATEDIFF(MI, t.Paydate, t.DelDate)) AS TotalDiff, 
     CONVERT(DECIMAL(10, 1), 
       AVG(CONVERT(NUMERIC(18, 2), DATEDIFF(MI, t.Paydate, t.DelDate)))) AS Average 
FROM Transaction_tbl t 
     LEFT JOIN VType_tbl v 
     ON t.vtid = v.vtid 
WHERE t.Locid = 5 
GROUP BY v.Vtype 

平均从Transaction_tbl吨 左加入VType_tbl v中t.vtid = v.vtid其中t.Locid = 5组用V .Vtype

我的输出:

 
Vtype       TotalDiff Average 
-------------------------------------------------- - 
Emaar Staff      NULL  NULL 
Normal       14044  189.8 
VIP        85   2.1 
VVIP        5   2.5 

,但我想摆脱这样的:

 
VtypeE  Etotaldiff  Eaverage VtypeN Ntot Naverge vtypev vtot vaverg 
Emaar Staff null    null  Normal 14044 189.8 VIP  85  2.1 
+3

寻找支点 –

+1

看起来要行列,而不是反过来转换为标题。这将是一个'unpivot' –

+0

为了让我可以重写这个查询 – user2603688

回答

1

您正试图将结果全部带回到一行。但是,这些列有不同的类型。这意味着内置的pivot不太实用。你可以做你通过明确合计原始查询想要的东西:

with cte as (
     SELECT v.Vtype, SUM(DATEDIFF(MI, t.Paydate, t.DelDate)) AS TotalDiff, 
      CONVERT(DECIMAL(10, 1), 
      AVG(CONVERT(NUMERIC(18, 2), DATEDIFF(MI, t.Paydate, t.DelDate)))) AS Average 
     FROM Transaction_tbl t LEFT JOIN 
      VType_tbl v 
      ON t.vtid = v.vtid 
    WHERE t.Locid = 5 
    GROUP BY v.Vtype 
    ) 
select 'Emaar Staff' as VtypeE, 
     max(case when type = 'Emaar Staff' then TotalDiff end) as ETotalDiff, 
     max(case when type = 'Emaar Staff' then Average end) as EAverage, 
     'Normal' as VtypeN, 
     max(case when type = 'Normal' then TotalDiff end) as NTotalDiff, 
     max(case when type = 'Normal' then Average end) as NAverage, 
     'VIP' as VtypeV, 
     max(case when type = 'VIP' then TotalDiff end) as VTotalDiff, 
     max(case when type = 'VIP' then Average end) as VAverage 
from cte;