2013-04-02 2 views
-1

У меня есть запрос, как это:Поворотные приводит к увеличению количества строк, чем нужно

`SELECT [/BIC/IORSVPTX] as Region, 
COUNTRY_ID, 
[/BIC/IOWCNTRY] as Country, 
[/BIC/IOC_TRLNO] as Trial, 
[/BIC/IOWQUAL] as ResourceType, 
case 

    when [/BIC/IOWQUAL] like '%Supporter%' 
     then 1 
    when [/BIC/IOWQUAL] like '%Monitor%' 
     then 3 
    when [/BIC/IOWQUAL] like '%PM%' 
     then 2 

    end as ResourceGroup, 
[1], [2], [3], [4], [5] 
FROM 
    (
SELECT [/BIC/IORSVPTX], 
COUNTRY_ID, 
[/BIC/IOWCNTRY], 
[/BIC/IOC_TRLNO], 
[/BIC/IOWQUAL], case 

    when [/BIC/IOWQUAL] like '%Supporter%' 
     then 1 
    when [/BIC/IOWQUAL] like '%Monitor%' 
     then 3 
    when [/BIC/IOWQUAL] like '%PM%' 
     then 2 

    end as ResourceGroup, 
left(CALMONTH,4) as StartYear, 
right(CALMONTH,2) as StartMonth, 
((left(CALMONTH,4) - 2013) * 12) + right(CALMONTH,2) AS YearMonth, 
QUANTITY as Hours 
     FROM dbo.Actuals 
     where [/BIC/IOC_TRLNO]<>'0000' and left(CALMONTH,4)>2012 and COUNTRY_ID='10' 
and ([/BIC/IOWQUAL] like '%PM%' or [/BIC/IOWQUAL] like'%Monitor%' or [/BIC/IOWQUAL] like '%Supporter%') 
) up 
PIVOT (sum(Hours) FOR YearMonth IN ([1],[2],[3],[4],[5])) AS pvt; 
IN ([1],[2],[3],[4],[5])) AS pvt;` 

, который дает мне выход с 2-мя рядами для каждого ResourceType и ResourceGroup с часами в течение 1 (январь) и 2-го ряда с ч в течение 2 (февраль) вместо 1 строки

Region COUNTRY_ID Country Trial ResourceType ResourceGroup 1 2 3 4 5 
North America 10 USA 3619  Monitor 3 158.5 NULL NULL NULL NULL 
North America 10 USA 3619  Monitor 3 NULL 42 NULL NULL NULL 
North America 10 USA 3619  PM/LTM/RTM  2 20 NULL NULL NULL NULL 
North America 10 USA 3619  PM/LTM/RTM  2 NULL 22 NULL NULL NULL 
North America 10 USA 3619  Supporter 1 18.5 NULL NULL NULL NULL 
North America 10 USA 3619  Supporter 1 NULL 15.75 NULL NULL NULL 

желаемый результат должен быть таким:

Region COUNTRY_ID Country Trial ResourceType ResourceGroup 1 2 3 4 5 
North America 10 USA 3619  Monitor 3 158.5 42 NULL NULL NULL 
North America 10 USA 3619  PM/LTM/RTM  2 20 22 NULL NULL NULL 
North America 10 USA 3619  Supporter 1 18.5 15.75 NULL NULL NULL 

Буду признателен за вашу помощь!

ответ

1

Я вижу несколько вещей, которые не соответствуют текущему запросу.

Во-первых, вы используете выражение CASE во внешнем и подзапросе. Я не совсем понимаю, почему вы это делаете, создав столбец с именем ResourceGroup.

Во-вторых, вы получите несколько строк, если ваш подзапрос содержит столбцы с различными значениями, и вы применяете опорную точку.

Например, в вашем подзапрос вы используете:

left(CALMONTH,4) as StartYear, 
right(CALMONTH,2) as StartMonth, 

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

на основе существующего запроса я предполагаю, что вы хотите использовать:

SELECT 
    [/BIC/IORSVPTX] as Region, 
    COUNTRY_ID, 
    [/BIC/IOWCNTRY] as Country, 
    [/BIC/IOC_TRLNO] as Trial, 
    [/BIC/IOWQUAL] as ResourceType, 
    ResourceGroup, 
    [1], [2], [3], [4], [5] 
FROM 
(
    SELECT [/BIC/IORSVPTX], 
    COUNTRY_ID, 
    [/BIC/IOWCNTRY], 
    [/BIC/IOC_TRLNO], 
    [/BIC/IOWQUAL],  
    case 
     when [/BIC/IOWQUAL] like '%Supporter%' then 1 
     when [/BIC/IOWQUAL] like '%Monitor%' then 3 
     when [/BIC/IOWQUAL] like '%PM%' then 2 
    end as ResourceGroup, 
    ((left(CALMONTH,4) - 2013) * 12) + right(CALMONTH,2) AS YearMonth, 
    QUANTITY as Hours 
    FROM dbo.Actuals 
    where [/BIC/IOC_TRLNO]<>'0000' 
    and left(CALMONTH,4)>2012 
    and COUNTRY_ID='10' 
    and ([/BIC/IOWQUAL] like '%PM%' 
     or [/BIC/IOWQUAL] like'%Monitor%' 
     or [/BIC/IOWQUAL] like '%Supporter%') 
) up 
PIVOT 
(
    sum(Hours) 
    FOR YearMonth IN ([1],[2],[3],[4],[5]) 
) AS pvt; 
+0

Большое спасибо, это работает – Mona

Смежные вопросы