SQL-запрос - вдоль строк сводной таблицы - PullRequest
0 голосов
/ 07 апреля 2009

У меня есть макет 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, но я изо всех сил пытаюсь сделать это правильно.

EDIT:

Я согласен, что вы можете использовать команду TSQL PIVOT, но что происходит, когда Btype является переменной. То есть я не знаю, сколько будет типов?

Ответы [ 4 ]

3 голосов
/ 07 апреля 2009
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
1 голос
/ 07 апреля 2009

@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
0 голосов
/ 07 апреля 2009

Смотрите это для хранимой процедуры для MySQL, которая производит кросс-табуляцию:

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

0 голосов
/ 07 апреля 2009

Кажется, что прямой свод поддерживается только SQL Server 2005, как показано здесь

Вот как это можно сделать с Oracle - http://www.adp -gmbh.ch / ora / sql / examples / pivot.html

...