Оптимизация sql, существующего запроса с использованием двух полных сканирований таблиц CTE - PullRequest
1 голос
/ 04 ноября 2010

Я ищу улучшения для запроса ниже, любой вход с благодарностью получен

with cteA as (
        select name, count(1) as "A" 
        from mytable 
        where y="A"
        group by name
    ),
    cteB as (
            select name, count(1) as "B" 
            from mytable 
            where y="B"
            group by name

    )
    SELECT  cteA.name as 'name',
        cteA.A as 'count x when A',
        isnull(cteB.B as 'count x when B',0)
    FROM
    cteOne 
    LEFT OUTER JOIN 
    cteTwo
    on cteA.Name = cteB.Name
    order by 1 

Ответы [ 2 ]

3 голосов
/ 04 ноября 2010
select name, 
       sum(case when y='A' then 1 else 0 end) as [count x when A],
       sum(case when y='B' then 1 else 0 end) as [count x when B]
    from mytable
    where y in ('A','B')
    group by name
    order by name
0 голосов
/ 04 ноября 2010

Самый простой ответ:

select name, y, count(*)
from mytable
where y in ('A','B')
group by name, y

Вы можете использовать PIVOT для перемещения значений строки Y в столбцы, если они вам нужны в столбцах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...