0

私はこのようなクエリを持っています

select convert(date,dtime) as Date, vtid,count(vtid) as count 
from Transaction_tbl 
group by cast(dtime as date),vtid 
order by  cast(dtime as date)

私はこのような出力を得ています

出力

Date       vtid        count
---------- ----------- -----------
2013-05-07 7           4
2013-05-08 7           5
2013-05-08 8           3
2013-05-08 9           1
2013-05-09 7           3
2013-05-12 8           1
2013-05-13 8           1
2013-05-15 7           1
2013-05-15 9           1

しかし、私は同じ行の特定の日付に出て行く必要があります,,

期待される出力

Date       vtid        count   vtid1   count1  vtid2  count2
-------------------------------------------------------------
2013-05-07   7           4      null    null    null   null    
2013-05-08   7           5       8        3        9    1
2013-05-09   7           3       null    null    null   null  
2013-05-12   8           1       null    null    null   null

誰かが方法を知っているなら、私を助けてください....

4

2 に答える 2

0

これはおそらく期待したほど動的ではありませんが、vtid 7、8、および 9 の期待される出力に似たものを生成します。

select d.Date, v7.vtid, v7.Count, v8.vtid, v8.Count, v9.vtid, v9.Count
from (select distinct convert(date,dtime) as Date from Transaction_tbl) as d
  left outer join (select convert(date,dtime) as Date, vtid, count(vtid) as Count from Transaction_tbl where vtid = 7 group by convert(date,dtime), vtid) as v7 on v7.Date = d.Date
  left outer join (select convert(date,dtime) as Date, vtid, count(vtid) as Count from Transaction_tbl where vtid = 8 group by convert(date,dtime), vtid) as v8 on v8.Date = d.Date
  left outer join (select convert(date,dtime) as Date, vtid, count(vtid) as Count from Transaction_tbl where vtid = 9 group by convert(date,dtime), vtid) as v9 on v9.Date = d.Date
order by d.Date

完全な開示: 私はこれを実行しようとはしませんでした。タイプミスがある可能性があります

編集:これはあなたに合った形式で出力を生成しないかもしれませんが、ピボットクエリは少しクリーンで変更が簡単です

select *
from (
  select vtid, convert(date, create_date) as Date
  from Transaction_tbl
  where locid = 5
) as vt
pivot (
  count(vtid)
  for vtid in ([7], [8], [9])
) as pvt
于 2013-06-18T07:36:42.187 に答える