0

実際のSQLクエリを表すSQLクエリのモックアップがあります。

Create table #tmp
(
    Atype varchar(10),
    Btype varchar(10)
)

insert into #tmp values ('a','x')
insert into #tmp values ('b','x')
insert into #tmp values ('a','y')
insert into #tmp values ('a','y')
insert into #tmp values ('b','z')
insert into #tmp values ('b','y')

select atype, btype,count(*) as count
from #tmp
group by atype, btype
order by atype

drop table #tmp

これにより、次の結果が得られます。

atype btype count
-----------------
a     x     1
a     y     2
b     x     1
b     y     1
b     z     1

この後に私が探しているのは、基本的に次のようなレポートを作成できるようにすることです。

atype|x| y| z
-------------
a    |1| 2| 0
b    |1| 1| 1

クレイジーな t-sql コードを使用してこれを行うことができると確信していますが、それを正しく行うのに苦労しています。

編集:

TSQL PIVOT コマンドを使用できることに同意しますが、Btype が可変の場合はどうなりますか。何種類あるかわからないということでしょうか?

4

4 に答える 4

3
SELECT
  atype, 
  SUM(CASE btype WHEN 'x' THEN 1 ELSE 0 END) AS x,
  SUM(CASE btype WHEN 'y' THEN 1 ELSE 0 END) AS y,
  SUM(CASE btype WHEN 'z' THEN 1 ELSE 0 END) AS z
FROM
  #tmp
group by 
  atype
order by 
  atype
于 2009-04-07T14:57:30.493 に答える
1

@Tomalakの答えは素晴らしいですが、それについてクレイジーなことは何もありませんSQL

T-SQLあなたが興味を持っている場合に備えて、あなたが求めた本当にクレイジーなコードは次のとおりです。

SELECT  atype, [x], [y], [z]
FROM    (
        SELECT  atype, btype
        FROM    #tmp
        ) t
PIVOT
        (
        COUNT(btype)
        FOR btype IN ([x], [y], [z])
        ) AS PivotTable
于 2009-04-07T15:13:06.150 に答える
0

クロス集計を生成する MySQL のストアド プロシージャについては、次を参照してください。

http://www.futhark.ch/mysql/106.html

于 2009-04-07T15:05:49.133 に答える
0

ここに示すように、ダイレクト ピボットは SQL Server 2005 でのみサポートされているようです。

これがOracleで行う方法です - http://www.adp-gmbh.ch/ora/sql/examples/pivot.html

于 2009-04-07T15:02:23.790 に答える