2016-04-29 4 views
-1

Я пытаюсь определить разницу между подсчетами записей, где у меня есть только два разных типа записей. Я хочу, чтобы показать количество записей для каждого типа записи и группы по дате:Хотите рассчитать счетчик разниц в SQL Server 2008

select 
    CONVERT(VARCHAR(5), aa.RUN_DATE, 1) AS 'RUN_Date', 
    case 
     when aa.SOURCE = 2 
      then 'RD' 
      else 'JD' 
    end as 'Source', 
    COUNT(*) as 'Item_Count' 
from 
    clientdb.inventory aa with(nolock) 
inner join 
    clientdb.record_type bb with(nolock) on aa.REC_TYPE = bb.OBJECT_ID 
where 
    aa.RUN_DATE > '2016-04-15' 
    and aa.CLIENT_NUMBER = 65432 
group by 
    case 
     when aa.SOURCE = 2 
      then 'RD' 
      else 'JD' 
    end, CONVERT(VARCHAR(5), aa.RUN_DATE, 1) 
order by 
    CONVERT(VARCHAR(5), aa.RUN_DATE, 1) desc, 
    case 
     when aa.SOURCE = 2 
      then 'RD' 
      else 'JD' 
    end 

Я хотел бы результаты появляться в некотором роде похожее на это:

results

Использование SQL Server 2008 база данных. Может кто-нибудь помочь?

+0

Set [Вредные Привычкам пнуть - положить NOLOCK везде] (http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/) - *** НЕ РЕКОМЕНДУЕТСЯ *** использовать это везде - совсем наоборот! –

ответ

0

Это похоже на ситуацию, когда вы можете использовать UNPIVOT.

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

RUN_Date JD   RD   Difference 
---------- ----------- ----------- ----------- 
2016-04-29 163   263   100 
2016-04-28 178   271   93 
2016-04-27 95   271   176 

Для целей данного примера следующий сценарий будет создать эту таблицу ...

create table BaseSummary 
(
    RUN_Date date, 
    JD int, 
    RD int, 
    Difference int 
) 

insert into BaseSummary values ('04/29/2016', 163, 263, 100) 
insert into BaseSummary values ('04/28/2016', 178, 271, 93) 
insert into BaseSummary values ('04/27/2016', 95, 271, 176) 

Вот заявление SQL с помощью UNPIVOT, чтобы получить то, что вы ищете ...

select RUN_Date, left(Source, 16) as Source, Item_Count 
from 
(
    select RUN_Date, JD, RD, Difference 
    from BaseSummary 
) p 
UNPIVOT 
(
    Item_Count for Source in 
     (JD, RD, Difference) 
) as unpvt 
order by RUN_Date desc 

Что дает это ...

RUN_Date Source   Item_Count 
---------- ---------------- ----------- 
2016-04-29 JD    163 
2016-04-29 RD    263 
2016-04-29 Difference  100 
2016-04-28 JD    178 
2016-04-28 RD    271 
2016-04-28 Difference  93 
2016-04-27 JD    95 
2016-04-27 RD    271 
2016-04-27 Difference  176 

Таким образом, можно суммировать данные вставки его в таблицу или даже временную таблицу и заменить «BaseSummary» с таблицей. Я не тестировал это, но я не вижу причин, по которым вы не могли просто заменить запрос с псевдонимом «p» на ваш итоговый запрос.

Надеется, что это помогает,

Noel